2011-02-14 21 views
1

編寫一個程序,將提示用戶輸入兩個整數,每個整數大於 .該程序將顯示並計算兩個整數在 中具有的除數共同。 附加要求: 如果整數小於1,則告訴用戶存在問題,然後再次提示它們輸入 整數。Python:顯示和計數兩個整數的因子

這是我到目前爲止寫的,但我在這裏卡住我不知道如何合併兩個數字。基本上我不知道該從哪裏出發,或者'這裏'甚至是正確的?

請幫助... [這是我第一次與Python]

integer1 = input("Enter an integer: ") 
integer2 = input("Enter an integer: ") 

print integer1, ": " , 

i = 1 
while i <= integer1 and integer2 : 

    if integer1 or integer2 < 1 : 
     print input("Enter an integer: ") 

    if integer1%i == 0 and integer2%i == 0 : 
     print i , 

    i = i + 1 

回答

3

嘗試做一個接一個的一步。並嘗試將你的任務分解成簡單的步驟。在您的例子可能是這樣的:

  1. 獲得第一個數字
  2. 獲取第二號
  3. 計算

這可以打破futher

  1. 獲取第一個數字:
    • 從用戶獲取號碼
    • 循環,而數字是不正常

...

這樣你可以看到,驗證不應該是while循環中。

另一個提示:分別測試每一步。通過這種方式,您會發現if integer1 or integer2 < 1while i <= integer1 and integer2不會按照您認爲的方式工作。

1

這並不是邏輯運算符在Python或編程中的工作原理。

while i <= integer1 and integer2 : 

在Python中integer2是一個獨立的邏輯語句,它始終爲真。 嘗試,而不是: while i <= integer1 and i <= integer2

0
  • 你要謹 驗證 循環之外您輸入的代碼。
  • 您的print i不需要 逗號。
  • 您的流程中的語法 控件需要一些工作,對於 示例if integer1 or integer2 < 1:應該是if ((integer1 < 1) or (integer2 < 1)):
0

首先我們應該做一個簡單的方法來得到兩個整數;注意可能有多個錯誤。 (更好的是raw_input和檢查數字解析爲一個int)。

integer1 = -1 
integer2 = -1 
while(integer1 < 1): 
    integer1 = input("Enter integer 1: ") 
while(integer2 < 1): 
    integer2 = input("Enter integer 2: ") 

factor_list1 = [] # store factor list of first number 
double_factor_count = 0 

# generate the factor list of the first number 
for i in range(1, integer1+1): # range(1,5+1) is the list [1,2,3,4,5] 
    if integer1 % i == 0: 
     factor_list1.append(i) 
for j in range(1, integer2+1): 
    if integer2 % j == 0 and j in factor_list1: 
     print j, 
     double_factor_count += 1 
print "\n double count:", double_factor_count 

也許你想改變它的範圍(2,整數1)如果你想跳過1和整數鍵入數字。

注意你的原代碼沒有縮進(所以沒有出現在論壇上的代碼,而andor表達式組合(例如,事情是TrueFalse)。所以,你的意思是if integer1 < 1 or integer2 < 1:

0

你的代碼實際上是非常接近的,但你有幾個問題:

  1. 你沒有驗證integer1integer2正確的(雖然我懷疑你知道,因爲你只是打印重置價值)
  2. 您的循環測試已損壞。你寫的意思是「i小於integer1,並且integer2也不爲零」。

您還可以改善你的代碼在幾個方面:

  1. 確保你的投入不僅是> = 1,同時也是一個整數。
  2. 使用for循環代替while循環,使用Python的出色的可迭代支持。

以下是如何確保什麼是用戶輸入的是一個整數

integer1 = 0 

while not integer1: 
    try: 
     # raw_input() ensures the user can't type arbitrary code 
     # int() throws a ValueError if what they typed wasn't an integer 
     integer1 = int(raw_input("Enter the first integer: ")) 

     if integer1 < 1: 
      print "You must enter an integer greater than 0!" 
      integer1 = 0 # so that our while statement loops again 
    except ValueError: 
     # the user typed something other than an integer 
     print "You must enter an integer!" 

whiletryif這裏陳述確保用戶將被迫之前輸入有效的整數您代碼繼續。下面是用戶看到的例子:

Enter the first integer: 6.6 
You must enter an integer! 
Enter the first integer: -5 
You must enter an integer greater than 0! 
Enter the first integer: sys.exit(0) 
You must enter an integer! 
Enter the first integer: 12 
Enter the second integer: 

這就是我建議你設置你的循環:

# min() returns the smallest of its arguments 
# xrange() iterates over a sequence of integers (here, starting with 1 and 
#   stopping at min(integer1, integer2)) 
for i in xrange(1, min(integer1, integer2) + 1): 
    # magic goes here! 

文檔鏈接:

0

你的問題是你的if語句。

而不是說:while i <= integer1 and integer2,你需要說while i <= integer1 and i <= integer2

這同樣適用於你的其他if語句。 if integer1 or integer2 < 1 :應該是if integer1 < 1 or integer2 < 1 :