如何在此代码中找到数字中的最大数字?

时间:2016-07-13 13:10:34

标签: python

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)

我写了上面的代码,但我认为在我尝试这段代码时,在数字中找到最大数字存在问题,我找不到任何解决方案。您对改进这部分代码有什么意见吗? 非常感谢

4 个答案:

答案 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

  1. 如果这是您的实际代码,则man未在任何地方定义,因此您将获得NameError

  2. 如果这不是您的实际代码而只是一个拼写错误且manmax,并且在您的代码中为if max < b.score那么此if将始终为{{1}您刚刚在上面一行中将False分配给b.score

  3. 无论哪种方式,为什么不简单地使用内置的max功能?

    max

答案 3 :(得分:1)

Rawing's回答相似,但您可以使用operator.attrgetter()

而不是lambda
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