Ответы пользователя по тегу Python
  • Как преобразовать "[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 комментарий