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 :(得分:1)
您可以将max
功能与自定义键功能一起使用:
b = max(y, key=lambda student: student.score)
print(b.stno, b.score)
答案 1 :(得分: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建议。
- 吉姆建议编辑
答案 2 :(得分:1)
for b in y:
max = b.score
if man < b.score:
max = b.score
您将max
分配给b.score
,然后在下一行中检查if man < b.score
。
如果这是您的实际代码,则man
未在任何地方定义,因此您将获得NameError
。
如果这不是您的实际代码而只是一个拼写错误且man
为max
,并且在您的代码中为if max < b.score
那么此if将始终为{{1}您刚刚在上面一行中将False
分配给b.score
。
无论哪种方式,为什么不简单地使用内置的max
功能?
max
答案 3 :(得分: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