2014-09-18 60 views
1

我有一个Python的任务,需要输入2个用户输入的数字(确保第一个数字小于第二个数字),并查找第一个数字的倍数和第二的除数..我只允许使用一个while循环(新条件我今天老师又补充道..)我和一个做了它的循环:查找2个用户输入数字的倍数和除数的数字

N_small = int(input("Enter the first number: ")) 
N_big = int(input("Enter the second number: ")) 
numbers = "" 


if N_small > N_big: 
    print("The first number should be smaller. Their value will be swapped.") 
    N_small, N_big = N_big, N_small 
for x in range(N_small, N_big+1, N_small): 
    if N_big % x == 0: 
     numbers += str(x) + " " 

print("The numbers are: ", numbers) 

我不要求对于如何使用while循环做到这一点的答案 - 但我只是需要一两个提示来弄清楚如何开始这样做...任何人都可以启发我吗?

感谢

+0

提示:首先找到第二个数字的约数。为了找到除数,从2到sqrt(n2)(为什么?)遍历所有数字,并保留那些当n2除以问题数字时余数为零的原因(为什么?)。然后循环浏览迄今为止保留的那些数字,并保留那些除以n1的余数为零的数字。 – 2014-09-18 23:31:52

+0

@RobertDodier:我想他问的是如何用等效的while循环替换他的'for'循环,而不是用于不同的算法(就像他现​​有的代码那样自然用'for'循环编写)。 – abarnert 2014-09-18 23:34:19

回答

2

您可以转换任何for环路成while循环平凡。下面是一个for循环是指:

for element in iterable: 
    stuff(element) 

iterator = iter(iterable) 
while True: 
    try: 
     element = next(iterator) 
    except StopIteration: 
     break 
    stuff(element) 

当然,这不是你的老师是要求在这里,但想想它是如何工作的。它遍历了range(N_small, N_big+1, N_small)中的所有值。你需要一些方法来获得这些值 - 理想情况下,没有迭代它们,只是基本的数学。

那么,那些值呢?他们是N_small,然后N_small+N_small,然后N_small+N_small+N_small,依此类推,直到您达到或超过N_big+1。那么,如何在没有迭代的情况下生成这些数字呢?

开始与此:

element = N_small 
while element ???: # until you reach or exceed N_big+1 
    stuff(element) 
    element ??? # how do you increase element each time? 

只需填写???部分。然后,注意你可能发生错误的地方,这会让你做一个循环太多,或者太少,以及你会如何编写测试。然后写这些测试。然后,假设你通过了测试(可能在修正了一个错误之后),你就完成了。

+0

我很感谢您的回应!谢啦! – Hazim 2014-09-18 23:38:12

0

您不必遍历所有的号码,只有倍数...

small, big = 4, 400 
times = 1 
while times < big/small: 
    num = times * small 
    if big % num == 0: print(num) 
    times += 1 
相关问题