2012-12-13 52 views
-1

編輯:解決另一種方式 等級= [71,70,72] 結果= [ 'Y', 'N', 'X'] 索引,在枚舉(等級)等級: grade.index(grade) 如果等級在等級: grade = input('grade:') print(等級[index],results [index]) ............ .................................................. .......................結果從if語句

我的代碼應該給

>>>71 
[71, 'y'] 
>>>70 
[70, 'n'] 
>>>72 
[72, 'error'] 

但它需要隨機(?)值形成我的if語句。它給

>>> 
grade: 71 
[72, 'n'] 
grade: 

而且,我得到的輸入()線引發EOFError和相同的,如果我的raw_input放()

的代碼是:

grades = [70,71,72] 
result1 = 'y' 
result2 = 'n' 
result3 = 'error' 
r = 'x' 
grade = input('grade: ') 

def get_result(r): 
    """ 
    (str) -> (str) 
    you're in or out 

    >>>71 
    [71, 'y'] 

    >>>70 
    [70, 'n'] 

    >>>72 
    [72, 'error'] 

    """ 

    r = 'x' 
    for grade in grades: 
     list=[grade, r] 

     if grade is 71: 
      r = result1    
     elif grade is 70: 
      r = result2   
     else: 
      r = result3   
    return(list) 
print(get_result(r)) 
+0

language ...?... – Neal

+2

@Near Python,顯然。 – suffa

+2

嘗試使用''如果等級== 71:''...''是''意味着稍微不同於'=='' – Max

回答

3
r = 'x' 
for grade in grades: 
    list=[grade, r] 

    if grade is 71: 
     r = result1    
    elif grade is 70: 
     r = result2   
    else: 
     r = result3 
return(list) 

這些if語句都不會改變任何內容,因爲您已經創建了list=[grade, r],舊值爲r,並且從不對新值做任何事情。

嘗試在if語句後移動list=[grade, r]

但是,當你在它的時候,你真的不應該命名變量list,因爲這是一個內置類型的名稱。

此外,你不會對變量做任何事情,但返回它,所以你甚至不需要它。

所以:

if grade is 71: 
     r = result1    
    elif grade is 70: 
     r = result2   
    else: 
     r = result3 
    return [grade, d] 

但是,你有一些其他問題與您的代碼。首先,你正在循環播放grades,其中每個重新定義list,所以你只返回最後一個。那麼循環的重點是什麼?我想你想是這樣的:

retval = [] 
for grade in grades: 
    r = 'x' 
    if grade is 71: 
     r = result1    
    elif grade is 70: 
     r = result2   
    else: 
     r = result3 
    retval.append([grade, r]) 
return retval 

此外,您可能要考慮把結果放到一個dict,而不是爲三個獨立的變量,因爲它會使你的代碼變得簡單許多:

results = { 71: 'y', 70: 'n', 72: 'error' } 
retval = [] 
for grade in grades: 
    retval.append([grade, results.get(grade, 'x')]) 
return retval 

,你可能會認識到這一模式「創建一個空列表,請各地追加到它的一個簡單的循環」的正是一個列表理解是,這樣你就可以讓這個更簡單:

results = { 71: 'y', 70: 'n', 72: 'error' } 
return [[grade, results.get(grade, 'x')] for grade in grades] 

同時,爲什麼你傳遞r參數到get_result,當你永遠不會訪問它,並且實際上你將r重新綁定到本地變量? (如果你運行的是pylint或類似的工具,它會遇到這樣的問題。)也許你真正想要的是grades參數?

從您以後的評論中,它聽起來像你實際上想要的是grade參數,因此你可以得到特定成績的結果。你不需要循環遍歷每一個等級。讓我們稍微改寫一下:

def get_result(grade): 
    return [grade, results.get(grade, 'x')] 

就是這樣。現在,這是整個腳本:

results = { 71: 'y', 70: 'n', 72: 'error' } 

def get_result(grade): 
    return [grade, results.get(grade, 'x')] 

grade = input('grade: ') 
print(get_result(grade)) 
+0

我試着選擇1(retval),它拒絕'返回retval。 – wanderer

+0

那麼,列表理解是很酷的,但是如果OP的知識水平與我在編程課程入門課程中所學的知識水平相同,那麼堅持'if'和'while'以及簡單變量可能會更好分配。這些基本的事情起初很難掌握。 –

+0

retval選項爲我提供了正確的組合,但對於每個等級。我的意思是我輸入例如70並給出等級:70 [[70,'n'],[71,'y'],[72,'error']] – wanderer