2014-09-18 58 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 
相關問題