Задать вопрос
  • Как преобразовать "[a,b,c]" в [a,b,c]?

    D1os
    @D1os
    Начинающий программист
    Ну я бы попробовал обычным генератором. Это просто, не нужно импортировать сторонние модули.
    string = "[a, b, c]"
    
    # Создаём список и запихиваем туда всё из данной строки, кроме того, что находится в условиях
    arr = [i for i in string if i != "[" and i != "]" and i != "," and i != " "]
    
    print(arr)

    Но эта система - такое. Потому что, если придётся хранить запятые или скобки (не знаю для чего), нужно будет усложнять условия, и генератор уже вряд ли поможет.
    Ответ написан
    Комментировать
  • Python создать функцию крестики-нолики с ИИ?

    D1os
    @D1os
    Начинающий программист
    Ты импортируешь randint из модуля random.
    from random import randint

    При этом у тебя присутствует строка:
    rchoice = random.choice(board)

    Либо добавляй from random import choice, либо импортируй всю библиотеку.
    Но это так, не по теме.
    По поводу функции. Я бы сделал validate функцией, которая без всяких raise'ов проверяет значение на True или False и возвращает их вместе с ошибкой. Тогда эту функция можно будет использовать для проверки.
    def validate(value=""):
        if value.isdigit():
            if int(value) in available_turns and board[int(value)] not in ["X", "O"]:
                return True
        print("Invalid input!")
        return False

    Теперь эта функция проверяет ввод и возвращает истину только в верном случае. Соответственно, мы можем использовать её как логическое выражение.
    if validate(choise):
        input_error = False

    Далее computer. Тут допущена одна критическая ошибка: ты вызываешь validate() без аргумента.
    validate()

    Следовательно, функция всегда будет вызывать ошибку, т.е. нельзя преобразовать value = " " в число командой int(value) :)
    if validate(rchoice):
        flag = False

    Также, можно ускорить сам алгоритм нахождения случайного числа, использую массив доступных клеток, как сказал iddqda. У тебя есть список available_turns. В него можно запихнуть не иксы, а цифры от 0 до 8 - координаты полей, и каждым ходом удалять из него числа ходов (choice, rchoice). Проверке в validate это не навредит. Далее мы его используем в "вычислениях" хода компьютера.
    rchoice = choice(available_turns)    # Если from random import choice

    И он сразу найдёт случайное правильное число, а не будет по 300 раз находить одно и то же)
    Есть ещё маленькая поправка, не влияющая на функционал: если переменная имеет значения не 0, True или строка как минимум с 1 символом, она будет считаться как True в логическом типе. Соответственно её можно вставлять в условие, как
    v = "Hi!"
    if v:
        print("Variable is true!")    # Вывод: Variable is true!

    У тебя в коде можно заменить
    if is_winner == True:

    на
    if is_winner:
    Тоже в конце. А также, current_player у тебя либо 1, либо 0. Значит, это тоже true, false.
    if current_player:
        flag = True
        # И так далее

    И ещё кое-что :) желательно функции написать вне главного цикла while. Это не влияет на функционал, но код станет чуток приличнее.
    P.s., если тебе нужен полный код функции, ответь на этот комм.
    Ответ написан
    4 комментария
  • Построить таблицу при помощи циклов в Python. Как сделать последовательность?

    D1os
    @D1os
    Начинающий программист
    В питоне можно задать работу цикла вручную.
    for i in range(2, 11, 2):
        print(i)

    В данном примере первый аргумент в скобках цикла - начальное значение счётчика, второй аргумент - конечное значение счётчика, третий - инкремент (увеличение) счётчика.
    Т. е., этот цикл распечатает каждое второе число в интервале от 2 до 10 (2, 4, 6, 8, 10).
    От этого отталкивайся.
    P.s., если надо, готовый код внизу.
    spoiler
    size = int(input("Table size: "))
    for i in range(size):
        for j in range(0, 2*size, 2):
            print(i + j, end=' ')
        print('\n')
    
    # Второй вариант
    for i in range(size):
        for j in range(i, 2*size + i, 2):
            print(j, end=' ')
    Ответ написан
    1 комментарий
  • Как перестать комментировать всё подряд?

    D1os
    @D1os
    Начинающий программист
    Некоторые вещи интуитивно поняты и не нуждаются в комментариях. Например true - понятно, что это истина/можно/да и т.д. Поэтому такие ненужные комментарии нужно опускать, т. к. это просто загромождение кода. Или, как сказали ранее, понятные названия переменных, функций и классов в сочетании с "нормальными" значениями образуют интуитивно понятную связь.
    Button_status = "Highlighted"
    window_current_x = 500
    is_visible = False

    Если нет возможности составить нормальные имена или присутствует нестандартный, массивный и сложный код, лучше написать пояснение.
    Чтобы тратить меньше времени, можно сокращать переменные, убирая лишние красивые слова. Главное, чтобы коммент был понятен.
    def gcd(x, x2):
        # Нахождение наибольшего общего делителя

    P.s., все примеры на Python, если что.
    Ответ написан
    Комментировать
  • С++ вывод на экран квадратов всех натуральных чисел меньших 20. Код не работает в чем проблема?

    D1os
    @D1os
    Начинающий программист
    1) #include - это способ подключения новых файлов и библиотек в программу. Поэтому нужно писать названия файла или библиотеки. #include iostream (обрамлённый квадратными скобками) в твоём случае (iostream позволяет выполнять ввод и вывод).
    2) в цикле for последний аргумент (после второй точки с запятой) - это изменение счётчика (i в твоём случае). Если написать i, то счётчик не изменяется, и всегда будет находиться квадрат 1. Самый стандартный вариант - i++. В этом случае с каждой новой интерацией цикла i увеличивается на 1.
    3) В c++ нет оператора "возведения в степень", поэтому надо просто умножить число на себя. В данном случае счётчик.
    Т.е.
    #include <iostream>
    
    using namespace std;
    
    int main() {
        for(int i = 1; i < 20; i++) {
            cout << i*i << ' ';
        }
    }

    В конуе ввода я дописал << ' '. Это написание пробела после выведенного числа. Просто для того, чтобы числа отделялись пробелами (попробуй без этого, и вывидется одно длинное число из квадратов).
    P.s., при этом, если в цикле выполняется всего 1 команда, то фигурные скобки можно не писать. Но мне так больше нравится.
    Ответ написан
    Комментировать