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