2016-07-13 415 views
-1
class student(object): 

    def student(self): 
     self.name=input("enter name:") 
     self.stno=int(input("enter stno:")) 
     self.score=int(input("enter score:")) 
    def dis(self): 
     print("name:",self.name,"stno:",self.stno,"score:",self.score) 
    def stno(self): 
     return self.stno 
    def name(self): 
     return self.name 
    def score(self): 
     return self.score 


y=[] 
j=0 
while(j<3): 
    a=student() 
    a.student() 
    y.append(a) 
    j+=1 


for st in y: 
    st.dis() 

for b in y: 
    max_v=b.score 
    if max_v<b.score: 
     max_v=b.score 
print(max,b.stno,b.score) 

我寫上面的代碼,但我認爲有一個問題,因爲我正在嘗試這個代碼找到最大數字,我找不到任何解決方案。你有任何意見來改進這部分代碼。 非常感謝如何查找此代碼中數字的最大數量?

+0

您已經創建只有一個學生,並把它稱爲。您需要創建更多的學生,並用不同的值填充他們的分數。每次創建學生時,都將其添加到學生列表中。我認爲你正在嘗試用'y'做到這一點。使用更好的名字。它會讓你更容易理解你的代碼。用更好的代碼回來 –

回答

1

類似Rawing's答案,但不是一個拉姆達,您可以使用operator.attrgetter()

from operator import attgetter 

class ... 
    # You class code remains unchanged 

y=[] 
j=0 
while(j<3): 
    a=student() 
    a.student() 
    y.append(a) 
    j+=1 


max_student = max(y, key=attrgetter('score')) 
print("Highest score:", max_student.name, max_student.score) 

生成輸出是這樣的:

enter name:dan 
enter stno:3 
enter score:3 
enter name:emily 
enter stno:20 
enter score:20 
enter name:frank 
enter stno:1 
enter score:1 
Highest score: emily 20 
1

您可以使用max功能使用自定義按鍵功能:

b = max(y, key=lambda student: student.score) 
print(b.stno, b.score) 
1

最大的循環應該是這樣的:

# works only with non-negative numbers 
max_val = 0 
for b in y: 
    if max_val < b.score: 
     max_val = b.score 

或使用max功能Rawing建議。

- 編輯吉姆建議

+0

你不應該使用'max'這樣的名字,因爲它們掩蓋了相應的內置函數'max'。使用更具指示性的東西,比如'max_val'。 –

+0

你說得對。這是從原始代碼複製粘貼。 – TehSphinX

1
for b in y: 
    max = b.score 
    if man < b.score: 
     max = b.score 

分配maxb.score,並在下一行你檢查if man < b.score

  1. 如果這是你的實際代碼,man不被任何定義,因此你會得到一個NameError

  2. 如果這不是你的實際代碼,只是一個錯字和manmax,並在你的代碼是if max < b.score那麼這是否會一直False,就像你剛纔在線路分配給b.score以上max

無論哪種方式,你爲什麼不簡單地使用內置的max函數?

print(max(y, key=lambda student_obj:student_obj.score)) 
相關問題