首页 > 解决方案 > 无法让我的函数在 Python 中满足 while 循环条件

问题描述

我的目标是:在 hog.py 中实现 roll_dice 函数。它有两个参数:一个称为 num_rolls 的正整数(将掷骰子的数量)和一个骰子函数(模拟单个骰子掷骰结果的函数)。它返回每轮掷骰子所获得的分数:结果的总和或 1。

当任何骰子结果为 1 时,它返回 1。

当我在 PyCharm 中调试时,它说 current_roll = 2,current_value = 4,num_rolls = 5 和 total_sum = 4。这让我相信它只经过了一次循环,因为 current_roll 应该是 5,因为 num_rolls 是 5。另外,因为 total_sum 只是 current_value。我试过移动变量赋值,但没有任何效果。

谁能给我任何指导,说明为什么我的函数在 current_roll 不 < num_rolls 之前不循环?抱歉,如果不清楚,我是初学者。我可以提供任何澄清

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 1
    total_sum = 0
    current_value = dice()
    while current_roll < num_rolls:
        current_roll += 1
        if current_value == 1 or total_sum == 1:
            return total_sum == 1
        else:
            total_sum = total_sum + current_value
            return total_sum

这是我的代码现在更新的内容:

    total_sum = 0
    current_roll = 0
    while current_roll < num_rolls:
        current_roll += 1
        current_value = dice()
        if current_value == 1 or total_sum == 1:
            total_sum = 1
            return total_sum
        else:
            total_sum += current_value
            return total_sum

我更新了我的代码,但它仍然没有通过。我将 dice() 函数添加到 while 循环中并更改了总和 = 1。你知道为什么它仍然没有通过吗?

标签: python

解决方案


您在 while 循环内返回,这将终止循环。

将您的 return 语句移到 while 循环之外

编辑:

在 while 循环内移动骰子函数调用。在您的代码的当前状态下,它只会掷一次骰子,然后检查掷骰num_rolls次数。

你也回来了,total_sum == 1这将返回TrueFalse不确定这是否是有意的


推荐阅读