0

私は、コンピュータ サイエンスのクラスのために、Python (私は Python 33 IDLE を使用しています) でじゃんけんゲームを作成しています。このスクリプトを書きましたが、実行して選択しても何も起こりません。助けて、どこが間違っているか教えてください。スクリプトは次のとおりです。

from random import choice
cpu = choice(('rock','paper','scissors'))
p1 = input(' rock, paper, or scissors? ')
rock = 1
paper = 2
scissors = 3
if(cpu == rock)and(p1 == rock):
    print('You Tied')
elif(cpu == rock)and(p1 == paper):
    print('You Win')
elif(cpu == rock)and(p1 == scissors):
    print('You Lose')
elif(cpu == paper)and(p1 == rock):
    print('You Lose')
elif(cpu == paper)and(p1 == paper):
    print('You Tied')
elif(cpu == paper)and(p1 == scissors):
    print('You Win')
elif(cpu == scissors)and(p1 == rock):
    print('You Win')
elif(cpu == scissors)and(p1 == paper):
    print('You Lose')
elif(cpu == scissors)and(p1 == scissors):
    print('You Tied')
4

2 に答える 2

1

これが宿題です = P

正誤表のいくつかのポイント:

1 - じゃんけんは定数で決して変わらないので、PEP 8 に従ってすべて大文字で書くのが最善です。

2 - コードの可読性を高めるために空白を使用することを恐れないでください。もともと、あなたはそれをすべて「まとめて」持っていました。論理的な部分に分割されている場合は、読むと便利です (PEP 8 を読んで従うようにしてください - Python スタイルガイドに従うと、非常に役立ちます!)

3 - もともと持っていたもの:

cpu = choice(('rock','paper','scissors'))

じゃんけんを作るのはどれですか? オプションを配置することにSTRINGS注意してください。''ランダムに選択されたオプションを評価したい場合は、最初に CONSTANTS をインスタンス化する必要があります。次に、それらのオプションからコンピューターに選択させる必要がありますcpu = choice()

4 - あなたが p1 を持っていたのは (あなたのせいではなく、私のフォントのせいで) 非常に _ 苛立たしい_ (あなたのせいではなく、私のフォントのせいです)... 私は pL のように pl を読んでいました... 特にこの理由から、変数に数字を含む名前を付けることは避けたいと思います。代わりに、player_one を使用しました (変数名はもう少し説明的であり、さらに説明的である可能性がありますが、この例では「十分」です)。繰り返しますが、PEP 8 はあなたの友達です!

5 - 初トライOK!Python へようこそ!

注意: 私は 3.* ではなく 2.6/2.7 Python を使用しています。そのため、input() の代わりに raw_input() を使用しています。

from random import choice

ROCK = 1
PAPER = 2
SCISSORS = 3

cpu = choice((ROCK, PAPER, SCISSORS))
player_one = raw_input('-> ROCK, PAPER, or SCISSORS? ')

if str(player_one).upper() == 'ROCK':
    player_one = 1
elif str(player_one).upper() == 'PAPER':
    player_one = 2
elif str(player_one).upper() == 'SCISSORS':
    player_one = 3
else:
    print('What the heck did you pick!?  Pick a valid option!')

if(cpu == ROCK)and(player_one == ROCK):
    print('You Tied')
elif(cpu == ROCK)and(player_one == PAPER):
    print('You Win')
elif(cpu == ROCK)and(player_one == SCISSORS):
    print('You Lose')
elif(cpu == PAPER)and(player_one == ROCK):
    print('You Lose')
elif(cpu == PAPER)and(player_one == PAPER):
    print('You Tied')
elif(cpu == PAPER)and(player_one == SCISSORS):
    print('You Win')
elif(cpu == SCISSORS)and(player_one == ROCK):
    print('You Win')
elif(cpu == SCISSORS)and(player_one == PAPER):
    print('You Lose')
elif(cpu == SCISSORS)and(player_one == SCISSORS):
    print('You Tied')

UPDATE1: 最新の質問への回答として、次のコードを確認してください。私はそれをきれいにするためにコードの改訂を行いました。「素人」にとっては読みやすさがいくらか失われましたが、Python の読み方に慣れれば、これも同様にきれいでわかりやすいと思います。新しいコードの最後の 2 行は、目標を達成できる (多くの方法のうちの) 1 つの方法を示しています。比較を強制することにより、最初に int() および str() から変換したいことに注意してください。これを行う必要はなかったので、私がしたことは妥協でした。tuple以前に使用していた int() オプションを実行し、それらを int() 値の表現である str() オブジェクトと組み合わせて作成しました. このようにして、インデックス値を参照することで、いつでも 2 つを切り替えることができます。

結果を文字列に出力したいという別のアプローチは、前の行スペースを int() に変換して str() に戻し、次のようにすることです。

print("You picked " + player_one + " and the CPU picked " + cpu)

しかし、繰り返しになりますが、player_one と cpu の整数を文字列に戻す必要があります。以下で私が使用している方法では、タプルを使用しています。これは、あなたのひざまずく反応があなたに望んでいることよりもこの方法を好むためです (これは、あなたがやろうと思っていたことに似ています)。

from random import choice

ROCK = (1, "ROCK")
PAPER = (2, "PAPER")
SCISSORS = (3, "SCISSORS")

cpu = choice((ROCK, PAPER, SCISSORS))

player_one = raw_input('-> ROCK, PAPER, or SCISSORS? ')

if str(player_one).upper() == 'ROCK':
    player_one = (1, "ROCK")
elif str(player_one).upper() == 'PAPER':
    player_one = (2, "PAPER")
elif str(player_one).upper() == 'SCISSORS':
    player_one = (3, "SCISSORS")
else:
    print('What the heck did you pick!?  Pick a valid option!')

out_vect = (cpu[0], player_one[0])

OUTCOMES = ('You Tied', 'You Win', 'You Lose')
POSSIBILITIES = (([(1,2), (2, 3), (3, 1)], OUTCOMES[1]), ([(2, 1), (3, 2), (1, 3)], OUTCOMES[2]))

if(out_vect[0] == out_vect[1]):
    print OUTCOMES[0]
elif out_vect in POSSIBILITIES[0][0]:
    print(POSSIBILITIES[0][1])
elif out_vect in POSSIBILITIES[1][0]:
    print(POSSIBILITIES[1][1])
else:
    print("~Epic Fail~ in the program!")

result_summary = "You chose " + player_one[1] + " and the CPU chose " + cpu[1]

print result_summary
于 2012-12-01T20:08:26.470 に答える
0

cpu'rock''paper'またはのいずれかですが、 、および と'scissors'のみ比較します。これがおそらく主な問題です。123

cpu = choice((1, 2, 3))それを修正するために行うことができます。

またはその逆で、整数ではなく文字列リテラルと比較してください。

if cpu == 'rock' and p1 == 'rock': # note the quotes

また、ifタイには 3 つの s がありますが、1 つしかないはずです:

if cpu == p1:
    print('You tied')
于 2012-12-01T20:01:16.413 に答える