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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:39:30