我正处于一个非常难以掌握的学校任务中。我已经尝试了几天,我想我终于差不多完成了,但是......我再次陷入困境,不知道为什么。
我应该让用户填写一个号码发件人(荷兰语)/输入。该数字应该小于或等于50.这个数字决定了用户可以做多少输入 - 这些新输入是测试用例。 每个测试用例应该是一个大于0的数字,但是等于或低于100.不需要非常深入地处理错误的输入,所以我只使用一些基本处理。
然后需要针对每个测试用例进行测试的是,最小数字是可被测试用例整除的数字,但是该最小数字的单独数字的总和应该等于您的测试用例本身。因此在示例中他们声明:input = 1,(这意味着1个测试用例,但他们没有说明),输入2 = 10(这意味着你唯一的测试用例是数字10,但他们没有说明)。它发出的数字是190(这是因为190/10 = 19,所以这是一个正确的结果,但是1 + 9 + 0 = 10,所以它通过了第二次测试,但是再次,他们没有说明。我不得不自己解决这个问题,这就是为什么这个分配花了我很长时间......这个问题本身就是荷兰语,几乎没有给你任何信息。
那么我的程序要测试的是,如果我输入数字25作为测试用例,例如25/25 = 1,那么有效且2 + 5 = 7.但是,在计算这个数字7之后,它似乎永远不会检查第二个条件。数字的总和需要为25,而不是7.程序现在被抛入无限循环,我看不出有什么问题。
我将在下面发布我的代码。我为变量名称和印刷文本道歉,因为它们是荷兰语。我希望我能够清楚地解释这一切的含义。
let retryAction = UIAlertAction(title: returnTitle(), style: UIAlertActionStyle.Default) { action in
switch action.title {
case "OK":
okFunc()
case "cancel":
cancelFunc()
default:
defaultFunc()
}
}
我希望你们能帮助我。非常感谢您提前一段时间,我知道这完全是文本之墙。
答案 0 :(得分:1)
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
在此while循环t
永远不会被修改,因此som == testgevallen[t]
将是常量,从而导致无限循环。
答案 1 :(得分:1)
手头有很多问题:
在第二次测试的内循环中(如果数字的总和匹配),否则你忘记增加vermenigvuldiging
,所以当它"找到"第一个满足模数条件的getal
,它将永远循环。
模数测试中getal
的处理也被破坏,仅在vermenigvuldiging
为1时匹配,否则testgevallen[t] % getal
将始终等于testgevallen[t]
,因为getal
}更大。这也将导致无限循环。实际上整个
getal = testgevallen[t] * vermenigvuldiging
似乎意味着以递增的顺序快速迭代testgevallen[t]
可被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
整除的数字。这使得整个模数测试变得多余。
至少输入 10 的工作解决方案可以是:
for vermenigvuldiging in count(1):
...
请注意,我已使用索引变量删除了迭代列表的值。只是直接迭代它。你也可以"增强"您的解决方案进一步使用itertools.count
,在这种情况下,您可以用以下内容替换while循环:
public async Task Invoke(HttpContext ctx,
IHostingEnvironment host,
ISomethingElse service)
{
// ...
}
答案 2 :(得分:0)
首先,您应该在docs here上查找sys.exit()的用法。该命令将在调用时退出程序,因此如果在第一个while循环结束时调用它,则第二个while循环将无法运行。您应该用来打破while循环的命令是
下面使用的breakwhile 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.
我怀疑第二个while循环永远不会运行,因为你使用的是sys.exit(),而不是仅仅从循环中断开。此外,在第二个while循环中,您需要更改t变量,否则Output moet zijn: ', som
将不断打印并卡在此循环中。