这里的初学者总编程,需要你的指导。
我从一些免费的在线课程学习python,然后遇到这个特殊的练习,我已经解决了,但令我困惑的是,有两种不同的方式会产生不同的结果。所以这就是..
问题: 使用文本文件studentdata.txt(如下所示)编写一个程序,计算每个学生的最低和最高分数。打印出他们的名字。
studentdata.txt:
乔10 15 20 30 40
bill 23 16 19 22
sue 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()
结果:
joe min:10 max:40
bill min:16 max: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()
哪个更简单,但它会产生稍微不同(但至关重要)的结果:
joe min:10 max:40
bill min:16 max:23
起诉:最多11:9 恩典最小值:10最大值:45
约翰敏:14最高:89
请注意, sue 的结果不同。 &#39;自动&#39;版本没有产生正确的结果。这是怎么发生的?
感谢。
答案 0 :(得分:3)
第二个版本的问题是它在比较之前不会将分数转换为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))
答案 1 :(得分:1)
网站上提供的答案会计算min
和max
帐户lexicographical order
。其余的答案都匹配,这只是巧合。
答案 2 :(得分:1)
这可能是因为在找到'minimum'和'maximum'时,数字没有转换为整数类型,它们被视为字符串类型。您应该首先使用map
函数或其他方式将其转换为您的方便。
我做到了这一点并且有效 -
print(xList[0],"\tmin: ",min(list(map(int, xList[1:]))),"\tmax: ",max(list(map(int, xList[1:]))))
答案 3 :(得分:0)
尝试将输入数据转换为整数,它应该可以工作。 Python有简单的&#34; int()&#34;您已在第一个版本中使用过的方法。问题是,然后比较字符串python使用字母顺序。例如:&#34; 100000000&#34;不到那么&#34; 2&#34;。但是int(&#34; 100000000&#34;)比int(&#34; 2&#34;)更能解决问题。
答案 4 :(得分:0)
第二个将它们作为字符串进行比较,字符串按字典顺序用字符串的第一个字符进行比较,例如&#39; 6&#39; &LT; &#39; 58&#39;这是假的,这个&#39; 8&#39; &GT; &#39; 234&#39;是真的。