Родился в 2007. Изучаю Python, c++, sql. Немного знаю lua. Программирую 2 года

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (5)
  • 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 комментария
  • С++ вывод на экран квадратов всех натуральных чисел меньших 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 команда, то фигурные скобки можно не писать. Но мне так больше нравится.
    Ответ написан
    Комментировать
  • Построить таблицу при помощи циклов в 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 комментарий