2017-06-01 4 views
-1

正しい単語が入力されても最初のif文が実行されないのはなぜですか?私が考慮しなかったことはありますか?正しい場合でも最初のステートメントは実行されません。 Python

EDIT - 問題を理解するために、コード全体を表示するために私の質問を含めました。

私はまだそれに問題があります。 .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

「はい」、「y」、「Y」または「はい」と入力すると、メッセージ「(「再生」[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ループを終了し(関数を終了する)、またはbreakreturnステートメントに置き換えることもできます。

+2

重要なのは、 'input()'の結果を 'strip()'することです。これは、いくつかのプラットフォームに最終改行が含まれているためです。 –

+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() 
関連する問題