2017-06-01 90 views
-1

为什么即使输入正确的单词,第一个if语句也无法执行。有没有我没有考虑过的东西?即使正确,第一条语句也无法执行。 Python

编辑 - 我已经包括我的问题显示整个代码,以便人们了解问题。

我仍然遇到问题。我用.strip()函数取代了我所做的,但无法执行。希望上传整个计划将帮助人们了解问题的根源。

from random import randint 

game_board = [] 
player_one = { 
    "name": "Player 1", 
    "wins": 0, 
    "lose": 0 
} 
player_two = { 
    "name": "Player 2", 
    "wins": 0, 
    "lose": 0 
} 

colors = {"reset":"\033[00m", 
      "red":"\033[91m", 
      "green":"\033[92m", 
      "yellow":"\033[93m", 
      "blue":"\033[94m", 
      "pink":"\033[95m", 
      "cyan":"\033[96m" 
       } 


# Building our 5 x 5 board 
def build_game_board(board): 
    for item in range(5): 
     board.append(["O"] * 5) 

def show_board(board): 
    for row in board: 
     print(" ".join(row)) 

# Defining ships locations 
def load_game(board): 
    print("WELCOME TO BATTLESHIP!") 
    print("Find and sink the ship!") 
    del board[:] 
    build_game_board(board) 
    print(colors['cyan']) 
    show_board(board) 
    print(colors['reset']) 
    ship_col = randint(1, len(board)) 
    ship_row = randint(1, len(board[0])) 
    return { 
     'ship_col': ship_col, 
     'ship_row': ship_row, 
    } 

ship_points = load_game(game_board) 


# Players will alternate turns. 
def player_turns(total_turns): 

    if total_turns % 2 == 0: 
     total_turns += 1 
     return player_one 

    return player_two 

# Allows new game to start 
def play_again(): 

    positive = ["yes", "y"] 
    negative = ["no", "n"] 

    global ship_points 

    while True: 
     answer = input("Play again? [Y(es)/N(o)]: ").lower().strip() 
     if answer in positive: 
      ship_points = load_game(game_board) 

     elif answer in negative: 
      print("Thanks for playing!") 
      exit() 

# What will be done with players guesses 
def input_check(ship_row, ship_col, player, board): 
    guess_col = 0 
    guess_row = 0 
    while True: 
     try: 
      guess_row = int(input("Guess Row:")) - 1 
      guess_col = int(input("Guess Col:")) - 1 
     except ValueError: 
      print("Enter a number only: ") 
      continue 
     else: 
      break 
    match = guess_row == ship_row - 1 and guess_col == ship_col - 1 
    not_on_game_board = (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4) 

    if match: 
     player["wins"] += 1 
     print("Congratulations! You sunk my battleship!") 
     print('The current match score is %d : %d (Player1 : Player2)' % (player_one["wins"], player_two["wins"])) 
     print("Thanks for playing!") 
     play_again() 

    elif not match: 
     if not_on_game_board: 
      print("Oops, that's not even in the ocean.") 

     elif board[guess_row][guess_col] == "X" or board[guess_row][guess_col] == "Y": 
      print("You guessed that one already.") 


     else: 
      print("You missed my battleship!") 
      if player == player_one: 
       board[guess_row][guess_col] = "X" 
      else: 
       board[guess_row][guess_col] = "Y" 

     print(colors['blue']) 
     show_board(game_board) 
     print(colors['reset']) 

    else: 
     return 0 


def main(): 
    begin = input('Type \'start\' to begin: ') 
    while (begin != str('start')): 
     begin = input('Type \'start\' to begin: ') 

    for games in range(3): 
     for turns in range(6): 

      if player_turns(turns) == player_one: 
       # print(ship_points) 
       print("Player One") 
       input_check(
        ship_points['ship_row'], 
        ship_points['ship_col'], 
        player_one, game_board 
       ) 

      elif player_turns(turns) == player_two: 
       print("Player Two") 
       input_check(
        ship_points['ship_row'], 
        ship_points['ship_col'], 
        player_two, game_board 
       ) 

      if turns == 5: 
       print("The number of turns has ended.") 
       print('The current match score is %d : %d (Player1 : Player2)' % (player_one["wins"], player_two["wins"])) 
       play_again() 

if __name__ == "__main__": 
    main() 
+1

我已经尝试过了,它实际上对我的作品。你能再详细一点吗? – Strinnityk

+0

@Strinnityk,+1,你能指定为什么不工作?你有什么错误?或缺失功能? – Netwave

+0

如果我输入'yes','y','Y'或'YES',那么信息'(“再次播放?[Y(es)/ N(o)]:”)'只是不断出现和游戏板不重新加载。 – zalidael

回答

1

试试下面的办法:

positive = ["yes", "y"] 
negative = ["no", "n"] 

while True: 
    answer = input("Play again? [Y(es)/N(o)]: ").lower().strip() 

    if answer in positive: 
     ship_points = load_game(game_board) 
     break 
    elif answer in negative: 
     print("Thanks for playing!") 
     exit() 

你的正面和负面的名单都是小写,所以最好先小写任何用户的答案,并且还去掉所有多余的空格或换行字符。

由于您的代码位于play_again()函数中,因此您需要以某种方式退出函数。您可以添加break语句以退出while循环(然后退出该函数),也可以用return语句替换break

+2

重要的一点是'剥离'input()'的结果,因为有些平台包含最终的换行符。 –

+0

@SvenMarnach:呵呵!我非常肯定,剥离是跨平台的,这也是我如何阅读文档的输入。哪些保存它? – DSM

+0

仍然不起作用。我编辑了这个问题以提供整个代码,可能会有帮助吗? – zalidael

0

回答过的问题:

正如@Strinnityk说,我增加了load_game()跌破并产生期望的结果:

positive = ["yes", "y"] 
negative = ["no", "n"] 

while True: 
    answer = input("Play again? [Y(es)/N(o)]: ").lower().strip() 

    if answer in positive: 
     ship_points = load_game(game_board) 
     break 
    elif answer in negative: 
     print("Thanks for playing!") 
     exit() 
相关问题