2013-01-05 21 views
0

我在while循環中要做的是迭代付款的整數10,這樣如果整數(g)在12個月內沒有得到CBalance <= 0,那麼所有變量都會重置,除了g,它由1如何更新循環中的單個變量?

Balance = float(raw_input('Enter Balance ')) 
Rate = float(raw_input('Enter interest rate ')) 
monthlyI = Rate/12 
month = 0 
g = 1 
Payment = 10 
CBalance = Balance 
while CBalance > 0: 
    Payment = Payment*g 
    month += 1 
    CBalance = CBalance *(1+ monthlyI)- Payment 
    if month > 12: 
     month = 0 
     g += 1 
     Cbalance = Balance 
+0

你的代碼似乎在做你說的話。什麼是問題? –

+4

只是一個評論:__Please__不用Python大寫變量名,這幾乎總是保留給類。 [PEP 8](http://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles)有更多信息。 –

+0

@frb:實際上PEP 8並沒有說Capwords的名字只能用於類。 – martineau

回答

1

我想我終於明白你的問題是怎麼樣的,什麼是造成問題的原因 - 一個變量名的分別是一個簡單的拼寫錯誤。爲了解決這個問題,只是改變按照您的while循環的if從報表的最後一行:

 if month > 12: 
      month = 0 
      g += 1 
      Cbalance = Balance 

到:

 if month > 12: 
      month = 0 
      g += 1 
      CBalance = Balance # note corrected spelling of variable name on left 

這就解釋了爲什麼所有的值不會被重置。如果你明確地提到了你的問題中的哪個變量,如果你知道的話,這將會很有幫助。無論如何,當你使用Capitalized和mixedCase變量名時,這種事情更可能發生。

因爲這個原因,許多程序員試圖避免它們,特別是像Python這樣的語言,在使用它們之前通常不需要聲明變量。您可能想看看PEP 8的風格指南的Naming Conventions部分。

+0

讓我澄清。如果12個月內的餘額小於或等於零,代碼就可以正常工作。我的問題是,如果在12個月的時間內餘額不能減少,我需要循環再次開始,所有具有原始值的變量除了g。如果我輸入120的餘額和.1的利率,那麼它會給我-3.03的餘額,月= 0和g = 2。 – user1951702

+0

其實你添加的東西沒有什麼幫助,除了它讓我再次考慮你的問題......突然間,我頓悟了一下,並相應地更新了我的答案。希望我說得對。 – martineau

0

我試圖在while循環做的是10的整數迭代支付上升,這樣,如果該整數(g)沒有得到CBalance < = 0在12個月內,所有變量重置除了g,其上升1.

我覺得發生了什麼事是,每次運行這個時間,而您將獲得:

Payment = 10 * 1 //First while payment = 10 

第二次

Payment = 10 * 1 //payment = 10 again. 

導致:

CBalance = CBalance * (1 + monthlyI) - 10 

可從來不會去一個負值,這是需要結束循環?

雖然你可能想:

counter = 1; 
while CBalance > 0: 
    Payment = Payment*counter 
    month += 1 
    counter += 1 
    CBalance = CBalance *(1+ monthlyI)- Payment 
    if month > 12: 
     month = 0 
     counter = 1 
     g += 1 
     Cbalance = Balance