Python if语句和循环在我的connect 4游戏中有点多余

2024-09-30 08:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个python类作业,但我的老师告诉我,我的代码块有点多余。基本上这是一个连接4游戏,我正在建设

这是我的代码,它没有任何错误,但是if语句的代码块有点冗余

def draw_board(field):
    for row in field:
        for column in row:
            
            print("|" + column, end="")
       
        print("|")
Board = [[" ", " ", " ", " ", " ", " ", " "], #0
         [" ", " ", " ", " ", " ", " ", " "], #1
         [" ", " ", " ", " ", " ", " ", " "], #2
         [" ", " ", " ", " ", " ", " ", " "], #3
         [" ", " ", " ", " ", " ", " ", " "], #4
         [" ", " ", " ", " ", " ", " ", " "]] #5

Player1 = input("Enter Player: ")
Player2 = input("Enter Player: ")

turn = Player1

while True:
    print("Players Turn:", turn)
    if turn == Player1:

        SelectColumn = int(input("Select Column from 0-6: \n"))

         if Board[-1][SelectColumn] == " ":
            Board[-1][SelectColumn] = Player1
            turn = Player2
         elif Board[-2][SelectColumn] == " ":
            Board[-2][SelectColumn] = Player1
            turn = Player2
         elif Board[-3][SelectColumn] == " ":
            Board[-3][SelectColumn] = Player1
            turn = Player2
         elif Board[-4][SelectColumn] == " ":
            Board[-4][SelectColumn] = Player1
            turn = Player2
         elif Board[-5][SelectColumn] == " ":
            Board[-5][SelectColumn] = Player1
            turn = Player2
         elif Board[-6][SelectColumn] == " ":
            Board[-6][SelectColumn] = Player1
            turn = Player2
    else:
        SelectColumn = int(input("Select Column from 0-6: \n"))
         if Board[-1][SelectColumn] == " ":
            Board[-1][SelectColumn] = Player2
            turn = Player1
         elif Board[-2][SelectColumn] == " ":
            Board[-2][SelectColumn] = Player2
            turn = Player1
         elif Board[-3][SelectColumn] == " ":
            Board[-3][SelectColumn] = Player2
            turn = Player1
         elif Board[-4][SelectColumn] == " ":
            Board[-4][SelectColumn] = Player2
            turn = Player1
         elif Board[-5][SelectColumn] == " ":
            Board[-5][SelectColumn] = Player2
            turn = Player1
         elif Board[-6][SelectColumn] == " ":
            Board[-6][SelectColumn] = Player2
            turn = Player1

draw_board(Board)

我想知道,有没有办法缩短这段代码,但仍然能够达到同样的目的,或者它是可以的,因为它是


Tags: 代码boardfieldforinputifturnrow
1条回答
网友
1楼 · 发布于 2024-09-30 08:32:00

你可以做两件事:

  1. 使用for loop
  2. 在转弯处使用值1-1

我还认为你的意思是把draw_board(Board)放在循环中。 无论如何,做上述两件事可以让你的代码更干净。 我还添加了一个复选框,这样用户就不能选择填充的列

def draw_board(field):
    for row in field:
        for column in row:
            print("|" + column, end="")
        print("|")

Board = [[" ", " ", " ", " ", " ", " ", " "], #0
        [" ", " ", " ", " ", " ", " ", " "], #1
        [" ", " ", " ", " ", " ", " ", " "], #2
        [" ", " ", " ", " ", " ", " ", " "], #3
        [" ", " ", " ", " ", " ", " ", " "], #4
        [" ", " ", " ", " ", " ", " ", " "]] #5

turn = 1
Player1 = input("Enter Player: ")
Player2 = input("Enter Player: ")

while True:
    player = Player1 if turn > 0 else Player2
    print("Player's Turn:", player)
    SelectColumn = int(input("Select Column from 0-5: \n"))
    # Prevent users from selecting already filled columns
    while Board[0][SelectColumn] != " ":
        SelectColumn = int(input("Select Column from 0-6: \n"))
    
    # fill column
    for i in range(6):
        if Board[-(i + 1)][SelectColumn] == " ":
            Board[-(i + 1)][SelectColumn] = player
            break
    turn *= -1  # 'swap' players
    draw_board(Board)
    # logic for checking winner would go here

相关问题 更多 >

    热门问题