1
#RockPS
import random

Choices=['R','P','S']
UserScore=0
CpuScore=0
Games=0

while Games<6:
    UserChoice=input('Rock, paper or scissors? (Type R, P or S respectively)')
    if UserChoice in Choices:
        Games+=1
CpuChoice = random.choice(Choices)   

if UserChoice == 'S' and CpuChoice == 'P':
    UserScore+=1
if UserChoice == 'P' and CpuChoice == 'R':
    UserScore+=1
if UserChoice == 'R' and CpuChoice == 'S':
    UserScore+=1
if UserChoice == 'S' and CpuChoice == 'R':
    CpuScore+=1
if UserChoice == 'P' and CpuChoice == 'S':
    CpuScore+=1
if UserChoice == 'R' and CpuChoice == 'P':
    CpuScore+=1

print(UserScore, CpuScore)
if UserScore>CpuScore:
    print('Well done, you won!')
if UserScore==CpuScore:
    print('You tied!')
if UserScore<CpuScore:
    ('Unlucky, you lost.')

私は Python を初めて使用するので、明らかな何かを見落としている可能性があります。プログラムは正常に実行されます。じゃんけんゲームです。5 ゲームが行われ、スコアはゲームの最後に表示されます。現時点では、1 0、0 0、0 1 のいずれかしか表示されず、1 ゲームのみカウントされます。これがなぜなのかわかりません。ループに問題は見られないので、インデントに関係していると思います。

4

2 に答える 2

1

何が起こっているか: コードのこの部分

while Games<6:
    UserChoice=input('Rock, paper or scissors? (Type R, P or S respectively)')
    if UserChoice in Choices:
        Games+=1

は 6 回実行されますが、ここから下の残りの行はすべて次のようになります。

CpuChoice = random.choice(Choices)   

if UserChoice == 'S' and CpuChoice == 'P':
    UserScore+=1
if UserChoice == 'P' and CpuChoice == 'R':
    UserScore+=1

ループの繰り返しが完了した後、一度だけ実行します。ループ本体の一部になるように、すべてのif UserChoice ==行をインデントする必要があります。

于 2012-04-18T15:20:51.363 に答える
0

はい、あなたのインデントが問題のようです。あなたは行を識別する必要があります

CpuChoice = random.choice(Choices)   

そしてライン

if UserChoice == ...

ラインと同じレベルに

if UserChoice in Choices:

while識別が と同じレベルに戻ると、ループの本体が終了しますwhile。したがって、現時点では、すべてのif UserChoice == ...条件は、ループが終了した後に一度だけチェックされます(これが、、またはwhileが表示されている理由です)。私が提案する行を特定すると、それらはループ本体の一部になります。1 00 00 1while

于 2012-04-18T15:19:17.393 に答える