2011-05-05 76 views
3
class cga(object): 
    '''''' 
    def __int__(self,i,o): 
     '''''' 
     self.i = i 
     self.o = o 

    def get(self): 
     '''''' 
     self.i = [] 
     c = raw_input("How many courses you have enrolled in this semester?:") 
     cout = 0 
     while cout < c: 
      n = raw_input("plz enter your course code:") 
      w = raw_input("plz enter your course weight:") 
      g = raw_input("plz enter your course grade:") 
      cout += 1 
      self.i.append([n,w,g]) 
if __name__ == "__main__": 
    test = cga() 
    test.get() 

我的問題是,如果我在程序中鍵入5時詢問我註冊了多少課程。循環不會停止,程序會不斷要求輸入課程代碼的權重等級。我調試時,它顯示程序有計數cout = 6,但它與c比較,while循環不停止。循環不能正確執行

+1

首先,解決您的壓痕。並非所有的代碼都被正確格式化。其次,添加print語句(或函數)來顯示'cout'和'c'的值,以便我們看到發生了什麼。 – 2011-05-05 19:31:06

+3

您知道,如果您不想使用文檔字符串,則可以將它們排除在外,而不是簡單地在其中放置空白文檔。 – bgw 2011-05-05 19:36:36

+0

這樣的文件挑逗... – 2011-05-05 19:37:53

回答

2

raw_input返回一個字符串,而不是一個int。您的評估邏輯有缺陷。您必須檢查用戶是否輸入了有效值(正整數,可能小於某個允許的最大值)。一旦你驗證這一點,那麼你就必須投c爲int:

c=int(c) 

只有這樣,你的比較邏輯是如何工作的,你的期望。

6

問題是,raw_input返回一個字符串(而不是一個數字),由於一些奇怪的歷史原因,默認情況下,字符串可以比較(用於排序)任何其他類型的對象,但結果是...奇。

Python 2.6.5 (r265:79063, Oct 28 2010, 20:56:23) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1 < "2" 
True 
>>> 1 < "0" 
True 
>>> 1 < "" 
True 
>>> 

比較之前轉換的結果爲整數:

c = int(raw_input("How many courses you have enrolled in this semester?:")) 
+0

需要驗證從raw_input返回的值作爲第一個有效的int ... – 2011-05-05 19:35:10

+0

@AJ:當然是個好主意。 :-) – Dirk 2011-05-05 19:35:57

+2

「出於一些奇怪的歷史原因」?不是真的。這是一個非常明智的理由:「明確比隱含更好」。隱式轉換是不對的。 – 2011-05-05 19:38:15