Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 4, 2022 14:19:27

K1ssuke1
Зарегистрирован: 2022-06-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите оптимизировать код

Мне нужно оптимизировать код но я в этом не разбираюсь помогите пожалуйста

 import random
mss1 = ["_", "_", "_"]
mss2 = ["_", "_", "_"]
mss3 = ["_", "_", "_"]
def printP():
    print("    1    2    3")
    print("A", mss1)
    print(" ")
    print("B", mss2)
    print(" ")
    print("C", mss3)
def win():
    if mss1[0] == "X" and mss1[1] == "X" and mss1[2] == "X": print("Win User"); return True
    elif mss2[0] == "X" and mss2[1] == "X" and mss2[2] == "X": print("Win User"); return True
    elif mss3[0] == "X" and mss3[1] == "X" and mss3[2] == "X": print("Win User"); return True
    elif mss1[0] == "X" and mss2[0] == "X" and mss3[0] == "X": print("Win User"); return True
    elif mss1[1] == "X" and mss2[1] == "X" and mss3[1] == "X": print("Win User"); return True
    elif mss1[2] == "X" and mss2[2] == "X" and mss3[2] == "X": print("Win User"); return True
    elif mss1[0] == "X" and mss2[1] == "X" and mss3[2] == "X": print("Win User"); return True
    elif mss3[0] == "X" and mss2[1] == "X" and mss1[2] == "X": print("Win User"); return True
    elif mss1[0] == "0" and mss1[1] == "0" and mss1[2] == "0": print("Win Comp"); return True
    elif mss2[0] == "0" and mss2[1] == "0" and mss2[2] == "0": print("Win Comp"); return True
    elif mss3[0] == "0" and mss3[1] == "0" and mss3[2] == "0": print("Win Comp"); return True
    elif mss1[0] == "0" and mss2[0] == "0" and mss3[0] == "0": print("Win Comp"); return True
    elif mss1[1] == "0" and mss2[1] == "0" and mss3[1] == "0": print("Win Comp"); return True
    elif mss1[2] == "0" and mss2[2] == "0" and mss3[2] == "0": print("Win Comp"); return True
    elif mss1[0] == "0" and mss2[1] == "0" and mss3[2] == "0": print("Win Comp"); return True
    elif mss3[0] == "0" and mss2[1] == "0" and mss1[2] == "0": print("Win Comp"); return True
def Bot():
    r = random.randint(1, 3)
    if r == 1:
        r = random.randint(0, 2)
        if mss1[r] == "_": mss1[r] = "0"
        else: Bot()
    elif r == 2:
        r = random.randint(0, 2)
        if mss2[r] == "_": mss2[r] = "0"
        else: Bot()
    elif r == 3:
        r = random.randint(0, 2)
        if mss3[r] == "_": mss3[r] = "0"
        else: Bot()
while True:
    printP()
    if win(): break
    else:
        user = input("-> ")
        if user == "A1" or user == "a1":
            if mss1[0] == "_": mss1[0] = "X"; Bot()
            else: print("No ")
        elif user == "A2" or user == "a2":
            if mss1[1] == "_": mss1[1] = "X"; Bot()
            else: print("No ")
        elif user == "A3" or user == "a3":
            if mss1[2] == "_": mss1[2] = "X"; Bot()
            else: print("No ")
        elif user == "B1" or user == "b1":
            if mss2[0] == "_": mss2[0] = "X"; Bot()
            else: print("No ")
        elif user == "B2" or user == "b2":
            if mss2[1] == "_": mss2[1] = "X"; Bot()
            else: print("No ")
        elif user == "B3" or user == "b3":
            if mss2[2] == "_": mss2[2] = "X"; Bot()
            else: print("No ")
        elif user == "C1" or user == "c1":
            if mss3[0] == "_": mss3[0] = "X"; Bot()
            else: print("No ")
        elif user == "C2" or user == "c2":
            if mss3[1] == "_": mss3[1] = "X"; Bot()
            else: print("No ")
        elif user == "C3" or user == "c3":
            if mss3[2] == "_": mss3[2] = "X"; Bot()
            else: print("No ")

Офлайн

#2 Июнь 4, 2022 17:25:44

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите оптимизировать код

 [2, 0, 2]
 [0, 1, 0]
 [0, 0, 1]
?
upd



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 4, 2022 17:38:55)

Офлайн

#3 Июнь 4, 2022 17:34:46

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите оптимизировать код

AD0DE412
?
Да крестики нолики это у него, вот из этой темы: https://python.su/forum/topic/41630/?page=1#post-222263

K1ssuke1
Мне нужно оптимизировать
Тут переделывать всё нужно с нуля а не оптимизировать.

Офлайн

#4 Июнь 4, 2022 17:37:26

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите оптимизировать код

да вижу просто видно человек
старается почему бы не помочь
ps ну и если … https://python.su/forum/post/222252/ тоже не фонтан



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 4, 2022 18:27:52)

Офлайн

#5 Июнь 5, 2022 22:13:33

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите оптимизировать код

Немного подправил гуляющую по интернету реализацию крестиков-ноликов, и прикрутил к ней бота, тыкающего нолик рандомно. Ходит он первым, чтобы достичь хоть какого-то паритета с игроком.

  
import random
board = list(range(1, 10))
WIN_MAP = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6),
           (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
 
def draw_board(board):
    print("-" * 13)
    for i in range(3):
        print("|", board[0 + i * 3],
              "|", board[1 + i * 3],
              "|", board[2 + i * 3], "|")
        print("-" * 13)
 
def player_turn():
    draw_board(board)
    while True:
        try:
            player_answer = int(input("Куда поставим X?\n>>> "))
        except:
            print("Некорректный ввод. Введите число.")
            continue
        if player_answer >= 1 and player_answer <= 9:
            if str(board[player_answer - 1]) not in "X0":
                board[player_answer - 1] = 'X'
                break
            else:
                print("Эта клетка уже занята!")
                continue
        else:
            print("Некорректный ввод. Введите число от 1 до 9.")
            continue
    return
 
def check_win(board):
    for each in WIN_MAP:
        if board[each[0]] == board[each[1]] == board[each[2]]:
            return board[each[0]]
    return False
 
def bot_turn():
    while True:
        bot_choice = random.choice(board)
        if str(bot_choice) not in "X0":
            board[bot_choice - 1] = '0'
            print('Бот поставил 0 на', bot_choice)
            return True
        else:
            continue
 
def main(board):
    counter = 0
    while True:
        if counter % 2 == 0:
            bot_turn()
        else:
            player_turn()
        counter += 1
        if counter > 4:
            tmp = check_win(board)
            if tmp == '0':
                print("Победил бот")
                break
            elif tmp == 'X':
                print("Вы победили!")
                break
        if counter == 9:
            print("Ничья!")
            break
    draw_board(board)
    input("Нажмите Enter для выхода.")
    return 0
 
if __name__ == '__main__':
    main(board)

Отредактировано Palrom (Июнь 5, 2022 23:47:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version