Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让while循环在Python中一次又一次地重复?_Python - Fatal编程技术网

如何让while循环在Python中一次又一次地重复?

如何让while循环在Python中一次又一次地重复?,python,Python,在Python中,我很难让while循环一次又一次地循环。以下是我试图解决的问题: 执行hog.py中的roll_dice功能 它有两个参数:一个名为num\u rolls的正整数,给出要掷骰子的数量,以及一个dice()函数 它返回一轮掷骰子的次数:结果之和或1(也称为“猪出”:如果任何骰子结果为1,则当前玩家的回合分数为1)。 要获得掷骰子的单个结果,请调用dice()。您应该在掷骰子体中准确地调用num\u rolls次。记住调用 DIIE() > NUMYROLL 时间,即使在滚动过

在Python中,我很难让while循环一次又一次地循环。以下是我试图解决的问题:

执行
hog.py
中的
roll_dice
功能

  • 它有两个参数:一个名为
    num\u rolls
    的正整数,给出要掷骰子的数量,以及一个
    dice()
    函数
  • 它返回一轮掷骰子的次数:结果之和或1(也称为“猪出”:如果任何骰子结果为1,则当前玩家的回合分数为1)。 要获得掷骰子的单个结果,请调用
    dice()
    。您应该在掷骰子体中准确地调用
    num\u rolls
    次。记住调用<代码> DIIE()<代码> > <代码> NUMYROLL 时间,即使在滚动过程中出现“猪”。这样,您就可以正确地模拟将所有骰子一起滚动
这是我到目前为止的代码,其中
num_rolls
:将进行的骰子掷数和
dice()
:模拟单个骰子掷结果的函数

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 0
    while current_roll < num_rolls:
        current_roll += 1
        total_sum = 0
        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
def roll_骰子(num_rolls,骰子=六面):
当前滚动=0
当前滚动<数量滚动时:
当前滚动+=1
总和=0
当前_值=骰子()
如果当前_值=1或总_和=1:
总和=1
返回总和
其他:
总和+=当前值
返回总和
当我在PyCharm中调试时,在我的示例中,当它在current_value=4上随机滚动时,总和=4,current_roll=1,即使所需的循环数为num_rolls=5。也就是说,当它应该循环5次时,它只循环了一次。有人能解释一下为什么会这样吗?我以前做过一个调整,当
current\u value=dice()
在while循环之外时,我将它移动到while循环内部,我认为它可以解决这个问题,但它没有


另外,如果有任何澄清,请告诉我。我是一个初学者,我不擅长解释事情

你似乎把你的最终回报声明放错地方了(缩进很重要!)。它应该是这样的:

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 0
    total_sum = 0
    while current_roll < num_rolls:
        current_roll += 1
        current_value = dice()
        if current_value == 1:
            total_sum = 1
            break
        else:
            total_sum += current_value
    return total_sum
def roll_骰子(num_rolls,骰子=六面):
当前滚动=0
总和=0
当前滚动<数量滚动时:
当前滚动+=1
当前_值=骰子()
如果当前_值==1:
总和=1
打破
其他:
总和+=当前值
返回总和

似乎您将最终返回语句放错了位置(缩进很重要!)。它应该是这样的:

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 0
    total_sum = 0
    while current_roll < num_rolls:
        current_roll += 1
        current_value = dice()
        if current_value == 1:
            total_sum = 1
            break
        else:
            total_sum += current_value
    return total_sum
def roll_骰子(num_rolls,骰子=六面):
当前滚动=0
总和=0
当前滚动<数量滚动时:
当前滚动+=1
当前_值=骰子()
如果当前_值==1:
总和=1
打破
其他:
总和+=当前值
返回总和

您的函数将在
if
else
语句中返回
,这将打破循环。似乎您要做的是将您的
return total_sum
语句移出while循环。@L.Grozinger我的while循环当前不是真的吗?由于
current\u roll=0
和while循环仅在
current\u roll=0
时发生,这是正确的,while循环本身是正常的,但返回太早。带有return语句的if else子句不应与循环缩进,它只应在while循环完成后发生。@khuynh将删除两个
return total\u sum
语句,并仅在与while循环相同的缩进处添加
return total\u sum
,以解决此问题吗,您应该使用
for u in range(num_rolls):
而不是
while
循环。您的函数将
if
else
语句中返回
,这将中断循环。似乎您要做的是将您的
return total_sum
语句移出while循环。@L.Grozinger我的while循环当前不是真的吗?由于
current\u roll=0
和while循环仅在
current\u roll=0
时发生,这是正确的,while循环本身是正常的,但返回太早。带有return语句的if else子句不应与循环缩进,它只应在while循环完成后发生。@khuynh将删除两个
return total\u sum
语句,并仅在与while循环相同的缩进处添加
return total\u sum
,以解决此问题吗,您应该使用
进行范围内(num\u rolls):
而不是
while
循环。谢谢!这是一个很简单的错误,但我坚持了好几个小时。我现在就知道了事实上,当我通过我的签名机运行这个时,它是最后一个失败的案例。我将
total\u sum=0
移动到了
current\u roll=0
下方的右侧,而不是while循环中。下面是我的自动签名器上的内容:>>>>计数骰子=进行测试骰子(4,1,2,6)>>>>掷骰子(3,计数骰子)1>>>>确保你准确地调用骰子的次数如果你称它为小于或大于此值,它将不会在下一次滚动循环的正确位置>>>>#注意,for循环中的return语句结束循环>>>滚动骰子(1,计数骰子)2错误:预期6,得到2你是对的,我的错。我现在编辑了我的帖子,并将total_sum移出while循环。谢谢!这是一个很简单的错误,但我坚持了好几个小时。我现在就知道了事实上,当我通过我的签名机运行这个时,它是最后一个失败的案例。我将
total\u sum=0
移到了
current\u roll=0
下的右侧,而不是ins