查找2个用户输入数字的倍数和除数的数字

时间:2014-09-18 23:24:43

标签: python loops math while-loop

我有一个Python分配2个用户输入的数字(确保第一个数字小于第二个)并找到第一个的倍数和第二个除数的数字..我' m只允许使用while循环(我的老师今天添加的新条件..)我已经用for循环完成了它:

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循环来解决这个问题的答案 - 但我只需要一两个提示来弄清楚如何开始这样做......任何人都可以启发我吗?

由于

2 个答案:

答案 0 :(得分: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?

只需填写???部分即可。然后看看你可能会有一个一个一个错误的错误,它会让你做一个循环太多,或者一个太少,以及你如何编写测试。然后编写那些测试。然后,假设你通过了测试(可能在修好错误之后),你就完成了。

答案 1 :(得分:0)

您不必遍历所有数字,只需迭代倍数......

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