2012-12-15 50 views
2

我正在做舊的99瓶歌曲,並試圖使用While循環來幫助我繼續更好地學習該循環類型。TypeError:沒有足夠的格式字符串參數 - 使用While循環

我想知道爲什麼我會在下面的代碼中得到TypeError,以及我錯過了哪些參數?

這裏是我的代碼:

# Get number of beers 
bottles = int(raw_input("How many bottles of beer? ")) 

# return invalid response 
if bottles < 1: 
    print "That's not a good number" 

    if bottles == 1: 
     s1 = "bottle" 
     s2 = "bottles" 

    elif bottles == 2: 
     s1 = "bottles" 
     s2 = "bottles" 

# sing verses 
while bottles > 0: 
    print "%d %s of beer on the wall," % bottles, s1 
    print "%d %s of beer." % bottles, s1 
    print "You take one down, pass it around," 
    print "%d %s of beer on the wall." % (bottles - 1), s2 
    print 
    bottles -= 1 

這裏是錯誤:

Traceback (most recent call last): 
    File "beer.py", line 47, in <module> 
      print "%d %s of beer on the wall," % bottles, s1 
TypeError: not enough arguments for format string 

我周圍使用括號嘗試 「瓶,S1的」 %之後,但仍然沒有按」幫助。有什麼建議麼?

+0

使用'(瓶,S1)'對我的作品。 – Tim

+0

如果瓶子的輸入是10,那該怎麼辦?s1'和's2'的定義在哪裏? – jdi

+0

如果您將'bottles'設置爲大於2的任何值,那麼您的代碼將生成NameError,因爲在這種情況下,您的if/elif都不會執行。您應該將elif更改爲if。此外,它看起來像你有一個縮進問題。 if/elif不應該放在'如果瓶子<1'的位置。 – BrenBarn

回答

5

你必須指定多個參數的元組,如

print "%d %s of beer on the wall," % (bottles, s1) 
+0

感謝您的幫助。除了將這些參數指定爲一個元組之外,我還意識到:1)'While'循環出錯了,應該在角落案例2之下。)我沒有'else'子句來允許數字高於2.乾杯。 –

相關問題