Python 我的程序中的while循环有多个if,但从未到达底部的if? 我是一个很难掌握的学校作业的中间人。我已经试了几天,我想我终于差不多完成了,但是。。。我又卡住了,不知道为什么
我应该让用户填写一个号码invoier(荷兰语)/input。这个数字应该小于或等于50。这个数字决定了用户还可以做多少输入——这些新输入是测试用例。 每个测试用例都应该是一个大于0但等于或小于100的数字。不需要深入处理错误的输入,所以我只使用一些基本的处理方法 那么需要为每个测试用例测试的是可被测试用例整除的最小数字,但该最小数字的独立数字之和应该等于测试用例本身。所以在这个例子中,他们声明:input=1(这意味着1个测试用例,但他们没有声明),input 2=10(这意味着你唯一的测试用例是数字10,但他们没有声明)。它发出的是数字190(这是因为190/10=19,所以这是一个正确的结果,但是1+9+0=10,所以它通过了第二次测试,但是他们没有声明。我必须自己弄清楚这一切,这就是为什么分配花了我这么长时间…问题本身是荷兰语,几乎没有给你任何信息) 所以我的程序测试什么,如果我输入数字25作为测试用例,例如,25/25=1,那么有效,2+5=7。然而,在计算了这个数字7之后,它似乎从未检查过第二个条件。数字之和必须是25,而不是7。程序现在被抛出无限循环,我看不出有什么不对 我将在下面发布我的代码。我为变量名和打印文本道歉,因为它们是荷兰语。我希望我把这一切的意思解释得足够清楚Python 我的程序中的while循环有多个if,但从未到达底部的if? 我是一个很难掌握的学校作业的中间人。我已经试了几天,我想我终于差不多完成了,但是。。。我又卡住了,不知道为什么,python,if-statement,while-loop,Python,If Statement,While Loop,我应该让用户填写一个号码invoier(荷兰语)/input。这个数字应该小于或等于50。这个数字决定了用户还可以做多少输入——这些新输入是测试用例。 每个测试用例都应该是一个大于0但等于或小于100的数字。不需要深入处理错误的输入,所以我只使用一些基本的处理方法 那么需要为每个测试用例测试的是可被测试用例整除的最小数字,但该最小数字的独立数字之和应该等于测试用例本身。所以在这个例子中,他们声明:input=1(这意味着1个测试用例,但他们没有声明),input 2=10(这意味着你唯一的测试用
import sys
invoer = int(input('Vul het aantal testgevallen in: '))
if invoer <= 50:
invoer = invoer
else:
print('Het getal moet groter kleiner dan of gelijk aan 50 zijn!!')
sys.exit()
t = 0
testgevallen = []
while t < invoer:
invoer2 = int(input('Vul een testgeval in groter dan 0 en kleiner of gelijk aan 100: '))
if 0 < invoer2 <= 100:
print('Testgeval ', t + 1, 'is: ', invoer2)
testgevallen.append(invoer2)
t += 1
print('Array is ', testgevallen)
else:
print('Het getal moet groter zijn dan 0 en kleiner of gelijk aan 100!!')
sys.exit()
t = 0
while t < invoer:
print('Opgegeven nummer ', t + 1, ' is ', testgevallen[t])
vermenigvuldiging = 1
doorgaan = True
while doorgaan == True:
getal = testgevallen[t] * vermenigvuldiging
if testgevallen[t] % getal == 0:
print(getal, ' - Dit getal is deelbaar door ', testgevallen[t])
som = sum(map(int, str(getal)))
print(som)
if som == testgevallen[t]:
print('Output moet zijn: ', som)
doorgaan = False
else:
doorgaan = True
else:
doorgaan = True
vermenigvuldiging += 1
t += 1
doorgaan = doorgaan
导入系统
发票=int(输入('Vul het aantal testgevallen in:'))
如果发票人
在这个while循环中,t
从不被修改,因此som==testgevallen[t]
将是常量,从而导致无限循环
在这个while循环中,
t
从不被修改,因此som==testgevallen[t]
将是常量,从而导致无限循环 首先,您应该在上查找sys.exit()的用法。调用此命令时将退出程序,因此如果在第一个while循环结束时调用此命令,则第二个while循环将永远无法运行。您应该用来中断while循环的命令是break,如下所示
while t < invoer:
invoer2 = int(input('Vul een testgeval in groter dan 0 en kleiner of gelijk aan 100: '))
if 0 < invoer2 <= 100:
print('Testgeval ', t + 1, 'is: ', invoer2)
testgevallen.append(invoer2)
t += 1
print('Array is ', testgevallen)
else:
print('Het getal moet groter zijn dan 0 en kleiner of gelijk aan 100!!')
break.
而t 如果首先是0
while t < invoer:
invoer2 = int(input('Vul een testgeval in groter dan 0 en kleiner of gelijk aan 100: '))
if 0 < invoer2 <= 100:
print('Testgeval ', t + 1, 'is: ', invoer2)
testgevallen.append(invoer2)
t += 1
print('Array is ', testgevallen)
else:
print('Het getal moet groter zijn dan 0 en kleiner of gelijk aan 100!!')
break.
而t 如果0
在第二个测试的else分支的内部循环中(如果数字总和匹配),您忘记了递增vermenigvoldiging
,因此当它“找到”满足模条件的第一个getal
时,它将永远循环
模测试中对getal
的处理也被破坏,只有当vermenigvolding
为1时才会匹配,否则testgevallen[t]%getal
将始终等于testgevallen[t]
,因为getal
更大。这也将导致无限循环。其实整个
getal = testgevallen[t] * vermenigvuldiging
似乎它是要以升序快速遍历可被testgevallen[t]
整除的数字。这使得整个模测试变得多余
至少输入10的工作解决方案可以是例如:
for tv in testgevallen:
print('Opgegeven nummer ', t + 1, ' is ', tv)
vermenigvuldiging = 1
while True:
getal = tv * vermenigvuldiging
# I've no idea what this says, but probably something along the lines
# of "is divisible by" and can be removed. Do print `getal` though
# when `som` is a match.
print(getal, ' - Dit getal is deelbaar door ', tv)
som = sum(map(int, str(getal)))
print(som)
if som == tv:
print('Output moet zijn: ', som)
break
# This is going to take a loooooong time for tv == 100
vermenigvuldiging += 1
请注意,我已经删除了使用索引变量遍历列表值的操作。直接迭代一下就可以了。您还可以进一步使用“增强”解决方案,在这种情况下,您可以使用以下内容替换while循环:
for vermenigvuldiging in count(1):
...
目前有多个问题:
在第二个测试的else分支的内部循环中(如果数字总和匹配),您忘记了递增vermenigvoldiging
,因此当它“找到”满足模条件的第一个getal
时,它将永远循环
模测试中对getal
的处理也被破坏,只有当vermenigvolding
为1时才会匹配,否则testgevallen[t]%getal
将始终等于testgevallen[t]
,因为getal
更大。这也将导致无限循环。其实整个
getal = testgevallen[t] * vermenigvuldiging
似乎它是要以升序快速遍历可被testgevallen[t]
整除的数字。这使得整个模测试变得多余
至少输入10的工作解决方案可以是例如:
for tv in testgevallen:
print('Opgegeven nummer ', t + 1, ' is ', tv)
vermenigvuldiging = 1
while True:
getal = tv * vermenigvuldiging
# I've no idea what this says, but probably something along the lines
# of "is divisible by" and can be removed. Do print `getal` though
# when `som` is a match.
print(getal, ' - Dit getal is deelbaar door ', tv)
som = sum(map(int, str(getal)))
print(som)
if som == tv:
print('Output moet zijn: ', som)
break
# This is going to take a loooooong time for tv == 100
vermenigvuldiging += 1
请注意,我已经删除了使用索引变量遍历列表值的操作。直接迭代一下就可以了。您还可以进一步使用“增强”解决方案,在这种情况下,您可以使用以下内容替换while循环:
for vermenigvuldiging in count(1):
...
请明确说明问题所在。如果需要,请使用数字。然后,提供一些示例输入和预期输出组合!这有帮助!我想你忘了在下面增加t,如果som==testgevallen[t]:print('Output moet zijn:',som)doorgaan=False>当t
对范围内的t(invoer)来说是时,执行第一个的更为简洁的方法:
第二个while t
应该类似于testgevallen:
中vallen的。这将消除对t
的需要以及您似乎存在的索引错误。while doorgaan==True: