<p>您的代码中存在许多问题:</p>
<ol>
<li>您没有正确使用<code>random.choice</code>。在</li>
<li>每次用户播放前都应该调用该函数。如果你叫它一次,它每次都会保持不变。在</li>
<li>要求用户输入一次值,因为<code>input(...)</code>函数在循环的</strong>外部被调用一次。在</li>
<li>这不是命名变量的方法(至少在Python中是这样)</li>
<li>多次使用if/elif执行相同的操作不是使用<code>or</code></li>
</ol>
<p>所以,你的代码应该是这样的:</p>
<pre><code>#RockPS
import random
game_choices = ['R','P','S']
user_score = 0
cpu_score = 0
games = 0
while games<6:
user_choice = input('Rock, paper or scissors? (Type R, P or S respectively)')
if user_choice in game_choices:
games += 1
cpu_choice = random.choice(cpu_choices)
if (user_choice == 'S' and cpu_choice == 'P') or \
(user_choice == 'P' and cpu_choice == 'R') or \
(user_choice == 'R' and cpu_choice == 'S'):
user_score += 1
elif (user_choice == 'S' and cpu_choice == 'R') or \
(user_choice == 'P' and cpu_choice == 'S') or \
(user_choice == 'R' and cpu_choice == 'P'):
cpu_score += 1
else:
print('Only R, P or S are allowed')
print(user_score, cpu_score)
if user_score>cpu_score:
print('Well done, you won!')
elif user_score == cpu_score:
print('You tied!')
elif user_score<cpu_score:
print('Unlucky, you lost.')
</code></pre>
<p>你还是可以改进的。我加了一张支票,确保字母不是RPS就是RPS。而这一大块的条件,你可以通过使用一个返回赢家的函数使它们变短(例如,如果cpu赢了,则返回1,如果玩家赢了,则返回0),等等。。。在</p>