You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

石头剪刀布(Rock, Paper, Scissors)游戏程序胜负平统计无法累计问题求助

石头剪刀布(Rock, Paper, Scissors)游戏程序胜负平统计无法累计问题求助

嘿,我看了你的代码和问题描述,核心问题是Python缩进错误,再加上一个退出函数的小写法问题,这俩问题凑一起导致你的胜负平统计没法正常累计。

问题1:缩进错误(最关键)

Python是靠缩进来划分代码块的,你写的主游戏循环while True:下面的所有代码都没缩进,这意味着这些代码根本不属于循环体。程序执行的时候,只会初始化一次wins、losses、ties为0,然后要么卡在空循环里,要么游戏逻辑只跑一次就没法重复执行,统计变量自然没法更新。

你得把主循环内的所有代码(从print('%s Wins, %s Losses, %s Ties' %(wins, losses, ties))开始,一直到最后一行losses = losses + 1)都缩进4个空格(或者保持统一的Tab缩进),让它们归到while True:的循环体里。

问题2:sys.exit没有实际调用

当用户输入q想要退出时,你写的sys.exit只是引用了这个函数,并没有真正调用它,正确写法应该是sys.exit(),这样程序才能正常退出。

修正后的代码示例

我把这俩问题都帮你改好了,你可以试试:

import random
import sys

print('ROCK, PAPER, SCISSORS')

# these variables keep track of the number of wins, losses, and ties
wins = 0
losses = 0
ties = 0

while True:  # The main game loop.
    print('%s Wins, %s Losses, %s Ties' %(wins, losses, ties))
    
    while True: # player input loop
        print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
        playerMove = input()
        if playerMove == 'q':
            sys.exit()  # 加上括号调用退出函数
        if playerMove == 'r' or playerMove == 'p' or playerMove == 's':
            break
        print('Type one of r, p, s or q.')
    
    # Display what the player chooses;
    if playerMove == 'r':
        print('ROCK versus ....')
    elif playerMove == 'p':
        print('PAPER versus ....')
    elif playerMove == 's':
        print('SCISSORS versus ...')
    
    # Display what the computer chose;
    randomNumber = random.randint(1,3)
    if randomNumber == 1:
        computerMove = 'r'
        print('ROCK')
    elif randomNumber == 2:
        computerMove = 'p'
        print('PAPER')
    elif randomNumber == 3:
        computerMove = 's'
        print("SCISSORS")
    
    # Display and record the win/loss/tie
    if playerMove == computerMove:
        print('It is a tie!')
        ties = ties + 1
    elif playerMove == 'r' and computerMove == 's':
        print('You win!')
        wins = wins + 1
    elif playerMove == 'p' and computerMove == 'r':
        print('You win')
        wins = wins + 1
    elif playerMove == 's' and computerMove == 'p':
        print('You win')
        wins = wins + 1
    elif playerMove == 'r' and computerMove == 'p':
        print('You lose')
        losses = losses + 1
    elif playerMove == 'p' and computerMove == 's':
        print('You lose')
        losses = losses + 1
    elif playerMove == 's' and computerMove == 'r':
        print('You lose')
        losses = losses + 1

为什么这样能解决问题?

  • 缩进修正后,每完成一局游戏就会回到主循环,更新并显示最新的胜负平统计数字
  • sys.exit()能让用户输入q时正常退出程序,不会卡在循环里

你运行修正后的代码,玩几局就能看到统计数字正常累计啦!

备注:内容来源于stack exchange,提问作者Gudmann1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:37:48