Python练习:计算每个学生的最低和最高分数。

2024-05-19 20:12:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这里编程总初学者,需要你的指导。在

我正在从一些免费的在线课程中学习python,然后遇到了这个我已经解决了的特殊练习,但是让我困惑的是,有两种不同的方法会产生不同的结果。就这样。。在

问题是: 使用文本文件学生数据.txt(如下所示)编写一个程序,计算每个学生的最低和最高分数。把他们的名字也打印出来。在

studentdata.txt:
joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89

我的最后一次尝试:

xFile = open("studentdata.txt", "r")

for xLine in xFile:
    xList = xLine.split()
    min = 100
    max = 0

    for x in xList[1:]:
        if int(x) > max:
            max = int(x)
    for x in xList[1:]:
        if int(x) < min:
            min = int(x)

print(xList[0],"\tmin: ",min,"\tmax: ",max)

xFile.close()

结果:

joe min: 10 max: 40
bill min: 16 max: 23
sue min: 2 max: 32
grace min: 10 max: 45
john min: 14 max: 89

然后我将它与网站提供的答案进行了比较(我以我的风格重写了它):

^{pr2}$

这更简单,但产生的结果略有不同(但至关重要):

joe min: 10 max: 40
bill min: 16 max: 23
sue min: 11 max: 9
grace min: 10 max: 45
john min: 14 max: 89

注意sue的结果是不同的。“自动”版本不能产生正确的结果。这是怎么回事?在

谢谢。在


Tags: intxtforminjohn学生maxint
3条回答

第二个版本的问题是在比较之前它没有将分数转换成int。比较字符串时,'32''9'之前。在

在使用minmax之前,可以通过将分数转换为int来解决此问题:

with open("studentdata.txt", "r") as xFile:
    for xLine in xFile:
        xList = xLine.split()
        scores = [int(x) for x in xList[1:]]
        print(xList[0],"\tmin: ",min(scores),"\tmax: ",max(scores))

网站上提供的答案计算min和{},并考虑{}。其他答案都吻合,这只是巧合。在

这可能是因为在查找“minimum”和“maximum”时,这些数字没有转换为整数类型,而是作为字符串类型。您应该首先使用map函数或其他根据您的方便进行转换。在

我做了这件事而且成功了-

print(xList[0],"\tmin: ",min(list(map(int, xList[1:]))),"\tmax: ",max(list(map(int, xList[1:]))))

相关问题 更多 >