我是python的新手,我尝试提示用户输入5个整数,然后我会找到最小值,最大值和平均值(以后会有其他内容)。所以我提示并尝试检查以确保输入是整数。然后我尝试构建一个列表并对其进行排序以找到最小值和最大值。问题是当我在一个数字中有多个数字时,并不总是找到正确的迷你,最大和平均值。
感谢任何帮助。
这是我的代码:
# Define strings minStr = 'Minimum Value is: ' maxStr = 'Maximum Value is: ' aveStr = 'Average Value is: '
# Prompt User for Integers:
strMontyPython = 'My hovercraft is full of eels. Let\'s sample them.' strMP2 = ' Take 5 samples and enter how many eels you saw on my hovercraft each time below.' print(strMontyPython + strMP2)
# First integer input int1 =input("Please Enter an Eel Count (as an integer).")
# Show knowledge of exceptions initially to check if integer was entered: try:
val = int(int1) except ValueError:
print("That's not an integer! \n Fish slap! \n Your min, max, and average will not be computed.")
print('You\'ve Entered: ' + int1)
# (Repeat 4 more times)
# Define functions and useage
# Make a list to compute min, max values: intList = [int1, int2, int3, int4, int5]
# Sort list intList.sort()
# Find min print(minStr + intList[0])
# Find max print(maxStr + intList[len(intList)-1])
# Find average value:
def averageEels(int1,int2,int3,int4,int5):
aveEels = (int1+int2+int3+int4+int5) / (5)
return aveEels
print(aveStr + str(averageEels(int(int1),int(int2),int(int3),int(int4),int(int5))))
答案 0 :(得分:0)
仔细看 - 你正在宣布
intList = [int1, int2, int3, ...]
当你阅读整数时,它们自然会被读作字符串。您可以像使用
一样将它们强制转换为整数val = int(int1)
但int1
仍为字符串,val
为int。由于字符串按字典顺序排序,10
将出现在2
之前,依此类推。解决方案是确保int1
在被添加到列表之前被转换为整数。
这里使用for循环快速清理代码,而不是一遍又一遍地重复代码:
intList = []
for _ in range(0, 5):
try:
val = input("Please Enter an Eel Count (as an integer).")
intList.append( int(val) )
except ValueError:
print("That's not an integer! ...")
此外,python实际上有内置的方法来计算像列表这样的可迭代对象的最小值,最大值和平均值(通过" sum / size"):
minimum = min(intList)
maximum = max(intList)
average = sum(intList) / len(intList)
如果您愿意,您仍然可以通过对列表进行排序来找到这些值,但是没有必要。
另一个单挑:如果你想访问列表的最后一个元素,你可以做
intList[-1]
python中的否定列表索引从列表的后面开始计算:-1
是最后一个元素,-2
是倒数第二个,依此类推。无需len(intList) - 1
。