0

私はPythonを初めて使用し、いくつかのプログラムを作成しただけです。これが私がじゃんけんゲームのために書いた最近のコードです。私はすでにそれをテストしました、そしてそれは素晴らしい働きをします。単純化する方法はありますか?ありがとう!

import random

wins=0   
losses=0    
ties=0    
rounds=0

r=1 #rock    
p=2 #paper    
s=3 #scissors

y = "The computer has made its choice, how about you?"

while rounds <= 10:    
 print y    
 x = input('(1)rock, (2)paper, or (3)scissors? :')
 choice = x    
 cpu_choice= random.randint(1, 3)

if (choice, cpu_choice) == (1, 2):    
  rounds += 1    
  losses += 1    
  print 'computer chose paper, you lose'
elif (choice, cpu_choice) == (3, 2):    
  print 'you win'    
  rounds += 1    
  wins += 1    
elif (choice, cpu_choice) == (2, 2):    
  print 'TIE!'    
  rounds += 1    
  ties += 1    
elif (choice, cpu_choice) == (1, 3):    
  print 'you win'    
  rounds += 1    
  wins += 1    
elif (choice, cpu_choice) == (3, 3):   
  print 'TIE!'    
  rounds += 1    
  ties += 1    
elif (choice, cpu_choice) == (2, 3):    
  print 'computer chose scissors, you lose'    
  rounds += 1    
  losses += 1    
elif (choice, cpu_choice) == (1, 1):    
  print 'TIE'    
  rounds += 1    
  ties += 1    
elif (choice, cpu_choice) == (3, 1):    
  print 'computer chose rock, you lose'    
  rounds += 1    
  losses += 1    
elif (choice, cpu_choice) == (2, 1):    
  print 'you win'    
  rounds += 1    
  wins += 1    
else:    
  print 'Please choose 1, 2, or 3'

print 'Game Over'

if wins>losses:
  print 'YOU WON'    
  print 'wins:' , wins   
  print 'losses' , losses    
  print 'ties' , ties    
else:    
 print 'you lose'    
 print 'wins:' , wins    
 print 'losses:' , losses    
 print 'ties:' , ties
4

5 に答える 5

4

スタックオーバーフローは実際には学習プラットフォームとして意図されたものではありませんが、ここにいくつかのアドバイスがあります:

  • ZENを読みます(import thisPythonコンソールに入力します)。
  • あなたの特定のケースでは、多くの条件は通常悪い考えです。

少なくとも、すべてのTIE条件を一緒にスローできます。

 if choice == cpu_choice:
    # TIE

いくつかの文法を投げます:

names = ['rock', 'paper', 'scissors']
print("Computer chooses {}, you loose".format(names[cpu_choice]))

基本的に、条件は3つだけです。

wins, losses = 0, 0

for round in range(10):

    # Your choice and CPU choice

    cpu_wins = (cpu_choice > choice or (choice == 3 and cpu_choice == 1))
    tie = (cpu_choice == choice)

    if cpu_wins:
        # You loose
        print("Computer chooses {}, you loose".format(names[cpu_choice]))
        losses += 1
    if not cpu_wins and tie:
        # tie
    else:
        # you win

pまた、上記で定義されrた変数も使用しません。s

于 2012-08-09T10:52:21.170 に答える
3

いくつかの提案:

  1. 間違ったデータ入力が発生した場合を除いて、すべての条件付きケースにはラウンド変数の増加が含まれているため、ラウンド+ = 1行を上に移動し、それ以外の場合はラウンド変数を1回だけ減少させることができます。

  2. 同じ仕事をする場合があります。たとえば、「TIE!」の場合です。起こりました; そのようなケースをグループ化することをお勧めします。'タイ!' ケースは1つの条件choice==cpu_choiceでグループ化できるため、3つのelif句を省略できます。他のゲームの場合にも同じ問題について考えてください。

  3. たとえば、 PEP-8標準が提案するような、より適切なコードフォーマットを使用します。

于 2012-08-09T10:50:20.407 に答える
2

モジュロ演算を使用して、プレーヤーが勝つかどうかを判断できます。

player_result = ["tie", "win", "lose"]
player_choice = input('(1)rock, (2)paper, or (3)scissors? :')
cpu_choice= random.randint(1, 3)
result = player_result[(player_choice - cpu_choice) % 3]

print "You " + result
if result == "win":
    wins += 1
elif result == "lose":
    loses += 1
于 2012-08-09T10:55:50.277 に答える
1

繰り返さないでください:

  • rounds += 1すべてのラウンドで発生するため、すべてのブランチを配置する必要はありません
  • 結果番号の印刷も常に行われます。
  • 4つのスペースを使用してコードをインデントします
于 2012-08-09T10:45:19.593 に答える
0

私はあなたのレベルより少し上かもしれないこのようなことをするでしょう、しかしあなたがこのコードがどのように機能するかを研究するならば、あなたはpythoNではるかに良くなるでしょう!:)

from random import randint

def do_rounds(num_rounds):
    choice_dict = {1: 'rock', 2: 'paper', 3: 'scissors'}
    beats_dict = {1: 3, 2: 1, 3: 2}

    for round in range(num_rounds):
        computer_choice = randint(1, 3)
        while True:
            player_choice = raw_input('(1)rock, (2)paper, or (3)scissors? :')
            if player_choice in ("1", "2", "3"):
                player_choice = int(player_choice)
                break
            else:
                print "input must be an integer 1, 2 or 3"

        player_lost = beats_dict[computer_choice] == player_choice

        tie = 1 if computer_choice == player_choice else 0
        win = 0 if player_lost else 1
        loss = 1 if player_lost else 0
        print "computer picked: %s" % choice_dict[computer_choice],
        print " you picked: %s" % choice_dict[player_choice]
        yield tie, win, loss

def run_game():
    ties, wins, losses = zip(*do_rounds(4))
    ties, wins, losses = sum(ties), sum(wins), sum(losses)
    print "ties = %s, wins = %s, losses = %s" % (ties, wins, losses)
    if wins > losses:
        print "you won!"
    elif wins == losses:
        print "tie!"
    else:
        print "loser!!!"

if __name__ == "__main__":
    run_game()

"""
(1)rock, (2)paper, or (3)scissors? :3
computer picked: rock, you picked: scissors
(1)rock, (2)paper, or (3)scissors? :2
computer picked: paper, you picked: paper
(1)rock, (2)paper, or (3)scissors? :1
computer picked: paper, you picked: rock
(1)rock, (2)paper, or (3)scissors? :3
computer picked: rock, you picked: scissors
ties = 1, wins = 1, losses = 3
loser!!!
"""
于 2012-08-09T11:01:05.757 に答える