Python条件循环未正确执行条件语句,原因排查求助
问题分析与解决
首先,你的代码里有两个关键问题,直接导致了非1数字也会计入score1,同时分数计算也不符合预期:
1. 缩进错误触发重复加分
看你循环里的逻辑:
for number in rolled_dice: if number == 1: score_total1 += number if score_total1 == 1: score1 += 100 elif score_total1 == 2: score1 += 200 elif score_total1 == 3: score1 += 300 elif score_total1 == 4: score1 += 1000
注意到第二个if语句没有缩进在if number ==1的代码块里!这意味着不管当前遍历的数字是不是1,每次循环都会执行后面的分数判断逻辑。
举个实际例子:第一个骰子是1,score_total1变成1,此时加100分;第二个骰子是2(非1),这时候score_total1还是1,代码又会执行score1 +=100,导致score1变成200,但实际上你只有1个1——这就是非1数字被“错误计入”的核心原因。
2. 分数计算逻辑不符合需求
你的需求是根据1的总个数一次性加分:1个加100,2个加200,3个加300,4个加1000。但当前代码是每遇到一个1,就根据当前累计的个数加分,导致重复累加。比如2个1的话,第一次加100,第二次加200,最终score1是300,而不是你想要的200。
另外还有个小问题:函数内部定义了score1 =0,这会覆盖全局的score1变量,导致函数执行后全局的score1不会被修改(如果你的逻辑是要修改全局变量的话)。
修正后的代码
我们可以先直接统计1的总个数,再根据个数一次性加分,逻辑更清晰,也彻底避免了缩进错误:
from random import randint score1 = 0 def dices(): global score1 # 声明使用全局变量score1,若不需要全局变量可改用返回值 # 用列表推导式简化6个骰子的生成 rolled_dice = [randint(1, 6) for _ in range(6)] # 直接统计列表中1的个数,简单高效 count_ones = rolled_dice.count(1) # 根据1的个数执行加分逻辑 if count_ones == 1: score1 += 100 elif count_ones == 2: score1 += 200 elif count_ones == 3: score1 += 300 elif count_ones >= 4: # 覆盖4个及以上1的罕见情况 score1 += 1000 # 返回结果方便调试 return rolled_dice, score1 # 测试示例 dice_result, current_score = dices() print(f"掷出的骰子: {dice_result}") print(f"当前score1: {current_score}")
修正点说明:
- 用
rolled_dice.count(1)直接统计1的个数,比循环累加更简洁,也不容易出错。 - 先统计总个数再一次性加分,完全匹配你的需求逻辑。
- 修复了缩进错误,彻底避免非1数字触发加分逻辑。
- 使用
global score1声明要修改全局变量(如果你的场景不需要全局变量,可以改为函数返回分数,更符合编程规范)。 - 用列表推导式简化了骰子生成代码,可读性更强。
这样修改后,就不会出现非1数字计入score1的问题,分数计算也完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者River
相关产品推荐
相关产品推荐

