我正在尝试编写一个程序,反复提示用户输入整数,直到用户输入“完成”为止。输入“完成”后,打印出最大和最小的数字。如果用户输入的数字不是有效数字,请用try / except捕获它,然后发出适当的消息并忽略该数字。
我在打印最大和最小数字时遇到问题。通过以下方法打印不正确的数字:
largest = None
smallest = None
list1 = []
while True:
num = input("Enter a number: ")
if num == "done" : break
try:
val = int(num)
if int(num):
list1.append(num)
except:
print("Invalid input")
print("Maximum is " + max(list1))
print("Minimum is " + min(list1))
我输入的数字分别是7、2,bob,10和4。
其打印输出为: 输入无效 最大值为7 最小为10
我正在寻找的输出是: 输入无效 最大值为10 最小为2
答案 0 :(得分:1)
不使用列表,您需要两个值来跟踪用户输入的最大值和最小值。当用户输入“完成”以外的非数字输入时,请使用try和except处理情况。
比使用列表存储值,对数据进行排序然后获得最终结果更快,更好的方法
import sys
min_val = sys.maxsize
max_val = -sys.maxsize-1
flag = True
while flag:
user_input = input()
if user_input == 'done':
flag = False
else:
try:
user_input = int(user_input)
if user_input>max_val:
max_val = user_input
if user_input<min_val:
min_val = user_input
except ValueError:
print('Enter a Valid Number')
print('Maximum Value is {}'.format(max_val))
print('Minimum value is {}'.format(min_val))
答案 1 :(得分:0)
您必须在列表中附加int
,而不是str
。
更改此:
if int(num):
list1.append(num)
执行以下操作之一:(if int(num)
是不必要的。)
list1.append(int(num))
或
list1.append(val)
在连接print语句之前,还必须转换为字符串:
print("Maximum is " + str(max(list1)))
print("Minimum is " + str(min(list1)))
进行修改后,您的程序应如下所示:
largest = None
smallest = None
list1 = []
while True:
num = input("Enter a number: ")
if num == "done" : break
try:
val = int(num)
list1.append(val)
except ValueError: # it is always better to specify what type of error you are expecting to catch
print("Invalid input")
print("Maximum is " + str(max(list1)))
print("Minimum is " + str(min(list1)))
答案 2 :(得分:0)
您将num
转换为一个int并将其存储在val
中,但是随后您忽略了它,并将原始num
插入了列表中。由于它是一个字符串,因此Python将按字母顺序对最小值进行排序,因此“ 10”小于“ 2”。
要解决此问题,您只需在列表中插入val
。
val = int(num)
if val:
list1.append(val)