2017-06-08 17 views
0

私は条件文と論理演算子を実践しています。最初の条件が満たされない場合の印刷方法は?

「これは有効なオブジェクトの選択ではありません」というロック、ペーパー、はさみのゲームプリントを作成するにはどうすればいいですか?プレーヤー1が入力した直後に、プレーヤー1が無効なオブジェクトを入力したかどうかを確認します。現在、両方のプレイヤーがオブジェクトに入るまで、文字列は印刷されません。

また、次のコードをもっとエレガントにするための提案はありますか?

player1 = input('Player 1? ') 
player2 = input('Player 2? ') 

if (player1.lower() == 'rock' and 
    player2.lower() == 'rock'): 
    print('Tie.') 
elif (player1.lower() == 'rock' and 
    player2.lower() == 'paper'): 
    print('Player 2 wins.') 
elif (player1.lower() == 'rock' and 
    player2.lower() == 'scissors'): 
    print('Player 1 wins.') 
elif (player1.lower() == 'paper' and 
    player2.lower() == 'paper'): 
    print('Tie.') 
elif (player1.lower() == 'paper' and 
    player2.lower() == 'scissors'): 
    print('Player 2 wins.') 
elif (player1.lower() == 'paper' and 
    player2.lower() == 'rock'): 
    print('Player 1 wins.') 
elif (player1.lower() == 'scissors' and 
    player2.lower() == 'scissors'): 
    print('Tie.') 
elif (player1.lower() == 'scissors' and 
    player2.lower() == 'rock'): 
    print('Player 2 wins.') 
elif (player1.lower() == 'scissors' and 
    player2.lower() == 'paper'): 
    print('Player 1 wins.') 
else: 
    print('This is not a valid object selection.') 

答えて

0

各プレーヤーに選択肢を尋ねる機能はどうですか?プレイヤーが有効な選択を入力した場合にのみ、ロジックステートメントにコードを進めることが許可されます。

def get_choice(Player_number): 
    print('Player', Player_number, 'please enter your choice: ', end='') 
    while True: 
     choice = input().lower()  #lower converts input to all lowercase 
     if choice in ('rock', 'paper', 'scissors'): # check if valid choice 
      return choice # if valid return choice 
     else: 
      print('Incorrect choice, try again: ', end='') # else print this and start loop agan 

player1 = get_choice('1') 
player2 = get_choice('2') 

player1 choice == player 2 choiceを選択すると、コード内に3つのelifブロックが置き換えられます。

if player1 == player2: 
    print('tie') 

は今PLを置き換え==岩とp2 ==岩、P1 ==はさみとp2 ==はさみ、電気ショック療法。

編集:

1)あなたは4で入力内に2にprint文を移動した場合、問題は、それが入力では動作しませんよう、あなたは、もはや、エンド=「」パラメーターを指定することができません。あなたが言ったように、それはSyntaxErrorを生成します。すべての行が並んでいるので、ターミナルでこのように実行するとコードははるかにクリーンに見えますが、自分でテストしてください。

2)end = ''は、print文の最後に空文字列を出力します。これを印刷後に新しい行を出力する '= n'と混同しています。私の方法は、印刷後に同じ行にカーソルを置いているので、入力と並んで見栄えが良くなります。上記の質問を参照してください。 Pythonのprintステートメントは、デフォルトでpass、end = '\ n'に注意してください。これは理由です。

print('hello') #same as print('hello', end='\n') 
print('world) 
hello 
world 

print('hello', end='') 
print('world', end='') 
helloworld 

3)whileループは常に真と評価されます。したがって、whileループの本体は常に循環しますが、 'return choice'関数を使用して関数全体から戻ることができます。 return文に到達するために必要な論理的なステップをダウンさせる場合は、この関数を終了する唯一の方法です。この場合、タプル( 'rock'、 'paper'、 'scisors')の中に選択肢がない限り、無効なエントリーが印刷され、ブロックを終了します。しかし、まだ真の間は、ループは再び開始され、ユーザに再度入力を要求する。これは、有効な選択肢が選択されるまで繰り返されます。あなたはplayer_numberなどにそれを連結することができ

4)..

print('Player', Player_number + ',' , 'please enter your choice: ', end='') 
+0

ありがとう!私のやり方はまだ機能していないが、私はほとんどの構文を理解していると思う。しかし、いくつか質問があります:1)2行目のprint()のコードが4行目のinput()に何らかの形で挿入されるのでしょうか?私は試しましたが、構文エラーを受け取りました。 2)私はend = ''の使用がデフォルトでprint文の後に新しい行を作成すると思った?しかし、これは逆のことをしているようです。なぜ説明できますか? 3)なぜ3行目のwhileループを使うのですか?一度コードを実行するだけでいいですか? – newbourne

+0

4)2行目のPlayer_numberの直後にカンマを挿入したい場合は、どのように達成されますか?私は空白を避ける方法を理解できません。 – newbourne

+0

私の編集をチェックして、私は質問に答えようとしました。私の答えを受け入れてください、ありがとう! – Rosh

関連する問題