2013-02-07 153 views
0

問題:基於用戶輸入計算兩個整數,其中第一個重複加倍,第二個除以二。在每個步驟中,如果第二個數字是奇數,則將第一個數字的當前值添加到其自身,直到第二個數字爲零。如何停止無限循環?

我的代碼似乎並沒有完全運行,我得到一個無限循環我做錯了什麼?我使用python 2.7.3

## 
## ALGORITHM: 
##  1. Get two whole numbers from user (numA and numB). 
##  2. If user enters negative number for numB convert to positive. 
##  3. Print numA and numB. 
##  4. Check if numB is odd if True add numA to numA.& divide numB by 2 using int division. 
##  Print statement showing new numA and numB values. 
##  5. Repeat steps 3 and 4 until numB is 0 or negative value. enter code here 
##  6. Prompt user to restart or terminate? y = restart n = terminate 
## 
## ERROR HANDLING: 
##  None 
## 
## OTHER COMMENTS: 
##  None 
################################################################## 

done = False 
while not done: 

    numA = input("Enter first integer: ") # 1. Get two whole numbers from user (A and B) 
    numB = input("Enter second integer: ") # 1. Get two whole numbers from user (A and B) 
    if numB < 0: 
     abs(numB) # 2. If user enters negative number for B convert to positive 
    print'A = ',+ numA,'  ','B = ',+ numB 
    def isodd(numB): 
     return numB & 1 and True or False 
    while numB & 1 == True: 
     print'B is odd, add',+numA,'to product to get',+numA,\ 
     'A = ',+ numA,'  ','B = ',+numB,\ 
     'A = ',+ numA+numA,'  ','B = ',+ numB//2 
    else: 
      print'result is positive',\ 
      'Final product: ', +numA 

    input = raw_input("Would you like to Start over? Y/N : ") 
    if input == "N": 
     done = True 
+2

不幸的是,您的代碼存在一堆問題。最大的一點是你永遠不會改變循環內的'numB',所以你一定會期望它循環無限! – katrielalex

回答

2

問題:

  • 你不需要寫done = False; while not done:。只需循環無限(while True),然後在完成後使用break退出循環。

  • input執行用戶鍵入的代碼(想象它像Python shell所做的那樣)。你想raw_input,所以你需要將它傳遞給int它返回一個字符串:

    numA = int(raw_input("...")) 
    
  • abs(numB)將計算的numB絕對值,但不會用它做任何事情。您需要將該函數調用的結果存儲在numB中,您喜歡這樣做numB = abs(numB)

  • 成語x and True or False未在最新的Python版本中使用;相反,使用True if x else false。但是,如果x == True返回True,否則False與剛返回x相同,所以要這樣做。

  • 你不需要循環while x == True。只需循環while x

  • 你永遠不會改變內循環內的numB的值,所以它永遠不會終止。


以下是我會寫:

while True: 
    A = int(raw_input("Enter first integer: ")) 
    B = int(raw_input("Enter second integer: ")) 
    if B < 0: B = abs(B) 

    print 'A = {}, B = {}'.format(A, B) 

    while B & 1: 
     print 'B is odd, add {} to product to get {}'.format(A, A) 
     A = # not sure what you're doing here 
     B = # not sure what you're doing here 
    else: 
     print 'Finished: {}'.format(A) 

    if raw_input("Would you like to Start over? Y/N : ").lower() == 'n': 
     break 
+0

謝謝,我剛開始編程,所以這對我來說都是新的。假設輸出結果如下所示。歡迎來到俄羅斯農民增殖! 輸入第一個整​​數:56 輸入第二整數:37 A = 56 B = 37 B是奇數時,加56到產品以便獲得56 A = 112 B = 18 A = 224 B = 9 B是奇數時,加224產品獲得280 A = 448 A = 896 A = 1792 B是奇數,加1792到產品得到2072 結果是肯定的。 最終產品:2072 >>> ================================ RESTART A = 1792 B是奇數,添加1792到產品獲得2072 結果是積極的。 最終產品:2072 – Fox

0

這裏的另一個問題是,你正試圖增加在print語句用數字除以內,這樣就不會在任何點更改整數numA和numB的值(也就是說整數numA和numB在整個程序中保持不變)。

要改變變量NUMA和麻木,你必須有:

  • 變量名=(作用於可變部分功能)

例如numA = numA + 1將一個添加到numA

+0

感謝npupp我沒有意識到我無法更改打印語句中的numA和B值.. – Fox