2012-05-31 58 views
0

更新:休息外循環與前面的例子

此代碼:

# North Carolina Sales Tax Estimator 
# Estimates the Amount of Tax You Should Pay in North Carolina 

# Defines the Current 2012 Tax Rate 
nctaxrate = 0.07 

# Defines the tax variable by multipling subtotal by the current nc tax rate 
# tax = subtotal * nctaxrate 

# Defines the total variable by adding the tax variable to the subtotal variable 
# total = subtotal + tax 

# Defines the Subtotal from an Input of the User's Purchase Amount 
def main(): 
    print("\t\t\tThis is the NC Sales Tax Estimator") 
    print("\t\t Input Your Total Purchases Below\n") 

    while True: 
     subtotal = float(input("Enter the total price of your purchases:\t$").strip()) 
     if subtotal == -1: break 
     tax = subtotal * nctaxrate 
     total = subtotal + tax 

     print("\tSUBTOTAL: $", subtotal) 
     print("\t  TAX: $", tax) 
     print("\t TOTAL: $", total) 

# if this script is called directly by Python, run the main() function 
# (if it is loaded as a module by another Python script, don't) 
if __name__=="__main__": 
    main() 

這裏是原題:

所以我正在學習Python和昨天問以前的問題,並提供帶着一套很棒的代碼,我決定修改它來處理我想要創建的NC銷售稅估算程序。

一件事是,我得到了一個突發循環錯誤,我不太明白。我搜索並試圖理解其含義,但我知道代碼之前工作。此外,我從零開始創建的稅碼程序:)在試圖增加在循環中提交許多輸入的花哨能力之前工作,直到用戶想要「退出」。

這裏是代碼:

# North Carolina Sales Tax Estimator 
# Estimates the Amount of Tax You Should Pay in North Carolina 

# Defines the Current 2012 Tax Rate 
nctaxrate = 0.07 

# Defines the tax variable by multipling subtotal by the current nc tax rate 
tax = subtotal * nctaxrate 

# Defines the total variable by adding the tax variable to the subtotal variable 
total = subtotal + tax 

# Defines the Subtotal from an Input of the User's Purchase Amount 
def main(): 
    print("\t\t\tThis is the NC Sales Tax Estimator") 
    print("\t\t Input Your Total Purchases Below") 

while True: 
    subtotal = float(input("Enter the total price of your purchases (or 'exit' to quit) :\$").strip()) 
    if subtotal.lower()=='exit': 
     break 

    try: 
     subtotal = int(subtotal) 
    except ValueError: 
     print("That wasn't a number!") 

    try: 
     print("\tSUBTOTAL: $", subtotal) 
     print("\t  TAX: $", tax) 
     print("\t TOTAL: $", total) 
    except KeyError: 
     print("") 

# if this script is called directly by Python, run the main() function 
# (if it is loaded as a module by another Python script, don't) 
if __name__=="__main__": 
    main() 

附:我只是添加了KeyError,因爲我研究了你嘗試後必須有錯誤語句。我只是一個初學者,所以我試圖自己創建程序並閱讀「絕對初學者的Python」。

UPDATE:

我固定的縮進,但現在我得到以下回溯錯誤:

Traceback (most recent call last): 
    File "C:/LearningPython/taxestimator.py", line 30, in <module> 
    tax = subtotal * nctaxrate 
NameError: name 'subtotal' is not defined 

我以爲我在輸入即定義它。

subtotal = float(input("Enter the total price of your purchases (or 'exit' to quit) :\$").strip()) 

是因爲被定義分類彙總之前使用的定義分類彙總的其他定義(含稅總額)的定義?我嘗試將它們移動到定義的小計下方,但它仍然不起作用。

感謝您的任何建議。

最佳,

史蒂芬

+0

匆匆一瞥,您的任何縮進都看起來不正確,這會導致問題。這*完全是*它如何看起來在你的文件? – Makoto

+0

我更新了帖子,發現了另一個錯誤。 – Steven

回答

1

,你必須是Python中需要的主要問題時,只是一個錯字空白範圍方法。如果沒有這一點,那麼報表將不會運行如預期 - 例如:

while True: 
    subtotal = float(input("Enter the total price of your purchases (or 'exit' to quit) :\$").strip()) 
if subtotal.lower()=='exit': 
    break 

不會爆發與有效輸入迴路(它將如果你把一個字符串有,但那是另一回事)的。另外,如果所有內容都在main()的範圍內,則每個語句都需要一級縮進(如果您願意,還需要四行空格)。目前,您的while將不會在main()的範圍內運行。

此外,您在實際給它一個值之前,請參考subtotal。由於subtotal未正確初始化,因此您將無法使用它。

你將要重寫,從而taxtotal定義定義subtotal你的代碼。

while True: 
    subtotal = float(input("Enter the total price of your purchases (or 'exit' to quit) :\$").strip()) 
    if subtotal.lower()=='exit': 
     break 
    tax = subtotal * nctaxrate 
    total = subtotal + tax 

最後,如果subtotaltotaltax正確定義(其中,上述後,他們會),就沒有必要對superflous try...except語句時,你要打印的值了。

+0

刪除try ... except並移動while語句下的定義,我收到另一個錯誤:Traceback(最近調用最後一個): 文件「C:/LearningPython/tax2.py」,第32行,在中 主() 文件 「C:/LearningPython/tax2.py」,第20行,在主 如果subtotal.lower()== '退出': AttributeError的: '浮動' 對象沒有屬性 '下' - 由於爲所有幫助順便說一句。 – Steven

+0

@Steven:不會期望float具有String方法。怎麼樣,而不是使用一個字符串,你使用一個整數(比如-1)打破循環? '如果小計== -1:break' – Makoto

+0

修正了它。謝謝Makoto和Joran。 – Steven

0
if subtotal.lower()=='exit': 
    break 

需要被大概......縮進,除非是進入問題

+0

在假設情況發生之前,我會說,「等待OP的澄清」。如果是這樣,那麼縮進比縮放還要多一點。 – Makoto

+0

耶實際上看起來像下面的一切還需要縮進......但可以肯定這兩條線 –

+0

啊,這是縮進問題,但現在卻給出了另一個錯誤:回溯(最後最近一次調用): 文件「C:/ LearningPython/taxestimator.py「,第30行,在 稅=小計* nctaxrate NameError:名稱'小計'沒有定義 – Steven