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