Python掷骰子程序roll函数返回None引发报错问题求助
掷骰子程序返回None崩溃的排查与解决
我写了个简单的掷骰子Python程序,运行几轮后偶尔会出现Player 1的掷骰结果返回None,导致程序报错终止,找不到原因。
程序错误输出截图:
核心代码如下:
import random from time import sleep rounds = 5 delay = 1 playerTwoScore = 30 playerOneScore = 20 def roll(): rollOne = random.randint(1,6) rollTwo = random.randrange(1,6) if rollOne == rollTwo: score = (rollOne + rollTwo) * 2 else: score = rollOne + rollTwo return score for i in range(rounds): playerOneRoll = roll() print("Player 1 rolled a",playerOneRoll) playerOneScore = int(playerOneScore) + int(playerOneRoll) print("Player 1's total score is",playerOneScore) print("----------------------------") sleep(delay) roll() playerTwoRoll = roll() print("Player 2 rolled a",playerTwoRoll) playerTwoScore = int(playerTwoScore) + int(playerTwoRoll) print("Player 2's total score is",playerTwoScore) print("----------------------------") sleep(delay)
问题根源
问题出在roll()函数的返回逻辑:
- 当掷出两个相同点数(
rollOne == rollTwo)时,函数只计算了score,但没写return语句,此时函数会默认返回None。 - 只有两个点数不同时,函数才会返回计算好的
score。 - 另外循环里有一行多余的
roll()调用,会浪费一次掷骰,但不是崩溃的直接原因。
修复方案
1. 修正roll()函数的返回逻辑
把return score移到if-else结构外面,确保不管掷出相同还是不同点数,函数都能返回正确的分数:
def roll(): rollOne = random.randint(1,6) rollTwo = random.randrange(1,6) if rollOne == rollTwo: score = (rollOne + rollTwo) * 2 else: score = rollOne + rollTwo return score # 确保所有分支都有返回值
2. 移除多余的掷骰调用
循环中那行单独的roll()没有任何作用,直接删掉即可:
for i in range(rounds): playerOneRoll = roll() print("Player 1 rolled a",playerOneRoll) playerOneScore = int(playerOneScore) + int(playerOneRoll) print("Player 1's total score is",playerOneScore) print("----------------------------") sleep(delay) # 删掉这行多余的roll() playerTwoRoll = roll() print("Player 2 rolled a",playerTwoRoll) playerTwoScore = int(playerTwoScore) + int(playerTwoRoll) print("Player 2's total score is",playerTwoScore) print("----------------------------") sleep(delay)
3. 可选优化:统一骰子范围
注意到rollOne用的是random.randint(1,6)(闭区间,包含1-6),而rollTwo用的是random.randrange(1,6)(左闭右开,只有1-5),如果希望两个骰子都是1-6的点数,把rollTwo也改成random.randint(1,6)即可。
内容的提问来源于stack exchange,提问作者FireFin
相关产品推荐
相关产品推荐

