Python 我的程序中的while循环有多个if,但从未到达底部的if? 我是一个很难掌握的学校作业的中间人。我已经试了几天,我想我终于差不多完成了,但是。。。我又卡住了,不知道为什么

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(这意味着你唯一的测试用

我应该让用户填写一个号码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。程序现在被抛出无限循环,我看不出有什么不对

我将在下面发布我的代码。我为变量名和打印文本道歉,因为它们是荷兰语。我希望我把这一切的意思解释得足够清楚

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: