石头剪刀布(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
相关产品推荐
相关产品推荐

