2014-03-05 82 views
0

我試過幾件事情來解決這個循環,它只是不會工作。至於現在它給了我一個語法錯誤,突出顯示第一個打印語句中的yes後面的引號......我沒有看到任何錯誤嗎?時髦雖然循環/時髦的語法錯誤Python 2.7

Ycount = 0 
Ncount = 0 
Valid = ["Y","y"] 
InValid = ["N","n"] 
Quit = ["Q","q"] 
Uinp = "" 

while Uinp != "Q": 
    Uinp = raw_input("Did you answer Y or N to the question(enter Q to quit)? ") 
    if Uinp in Valid: 
     Ycount = Ycount + 1 
     print "You have answered yes" ,Ycount, "times" 
     print "You have answered no" ,Ncount, "times" 
    elif Uinp in InValid: 
     Ncount = Ncount + 1 
     print "You have answered yes" ,Ycount, "times" 
     print "You have answered no" ,Ncount, "times" 
    elif Uinp in Quit: 
     break 
+0

很明顯,它也複製了滑稽....變量在我的評論結束... – Carsomyr

+1

您的代碼適合我。 – Hoppo

+0

什麼是給你一個語法錯誤 - 在你的編輯器中突出顯示,或者當你嘗試運行時解釋器?...你使用的是什麼版本的Python:是2.x還是3.x? –

回答

1

編輯:你的問題的解決方案是由森美阿魯斯給出的 - 我提出的觀點僅僅是良好的Python的做法。

打印出他們與各種類型的字符串(在你的情況,字符串,然後INT,其次是字符串中的首選,Python的方式,是使用上的字符串操作.format(*args)功能。在這種情況下,你可以使用

print ("You have answered yes {0} times".format(Ycount)) 

如果你要打印出多個參數,第一個是由{0}引用,接下來通過「{1}」,等等。

雖然它也適用於使用C-esque %運營商格式化蜇(例如You have answered yes %d times " % Ycount,這我不是首選。

嘗試使用大括號語法。在大型項目中,它將顯着提高代碼速度(計算並打印一個字符串,而不是打印三個字符串),而且通常對Python更具慣用性。

+0

雖然這是有用的信息 - 它沒有解決OP所假設的錯誤......(很可能他們使用的是3.x版本,並且需要使用「print」作爲函數,而不是聲明。 ..) –

1

我已經在python 2下運行了你的代碼,它按預期工作。

在python3但是,也有讓你運行它需要做一些改變:

不再支持print "something",你需要使用 print ("something")

raw_input更名爲input

Ycount = 0 
Ncount = 0 
Valid = ["Y","y"] 
InValid = ["N","n"] 
Quit = ["Q","q"] 
Uinp = "" 

while Uinp != "Q": 
    Uinp = input("Did you answer Y or N to the question(enter Q to quit)? ") 
    if Uinp in Valid: 
     Ycount = Ycount + 1 
     print ("You have answered yes" ,Ycount, "times") 
     print ("You have answered no" ,Ncount, "times") 
    elif Uinp in InValid: 
     Ncount = Ncount + 1 
     print ("You have answered yes" ,Ycount, "times") 
     print ("You have answered no" ,Ncount, "times") 
    elif Uinp in Quit: 
     break