完全初学者在这里编程,需要您的指导。
我正在通过一些免费的在线课程学习python,然后遇到这个特定的练习,我已经解决了这个问题,但让我困惑的是,有两种不同的方式产生了不同的结果。所以就这样..。
问题:使用文本文件studentdata.txt (如下所示)编写一个程序,计算每个学生的最低和最高分数。把他们的名字也打印出来。
studentdata.txt: 乔10 15 20 30 40 条例草案23 16 19 22 起诉8 22 17 14 32 17 24 21 2 9 11 17 格蕾丝12 28 21 45 26 10 约翰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()结果:
乔·民: 10 : 40 比尔:最低: 16 : 23 苏民:2: 32 格蕾丝·米恩: 10 : 45 约翰·民: 14分上限: 89分
然后,我把它与网站提供的答案进行比较(我用我的风格重写了它):
xFile = open("studentdata.txt", "r")
for xLine in xFile:
xList = xLine.split()
print(xList[0],"\tmin: ",min(xList[1:]),"\tmax: ",max(xList[1:]))
xFile.close()这更简单,但它产生的结果略有不同(但至关重要):
乔·民: 10 : 40 比尔:最低: 16 : 23 苏民: 11,最大值:9 格蕾丝·米恩: 10 : 45 约翰·民: 14分上限: 89分
注意,sue的结果是不同的。“自动”版本不能产生正确的结果。这是怎么回事?
谢谢。
发布于 2016-12-28 11:19:35
第二个版本的问题是,在比较之前,它不会将分数转换为int。当比较字符串时,'32'出现在'9'之前。
您可以通过在使用int和min之前将分数转换为max来解决这个问题。
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))发布于 2016-12-28 11:20:58
在站点上提供的答案计算min和max,并考虑到lexicographical order。其余的答案都符合,这只是个巧合。
发布于 2016-12-28 11:33:09
这可能是因为在查找“最小”和“最大值”时,数字没有转换为整数类型,而是被视为字符串类型。您应该首先根据您的方便使用map函数或其他方法来转换它。
我做了这个,它起了作用-
print(xList[0],"\tmin: ",min(list(map(int, xList[1:]))),"\tmax: ",max(list(map(int, xList[1:]))))https://stackoverflow.com/questions/41360911
复制相似问题