我在Ubuntu 13.04上用python 2.7编写了一个小的max_min程序。代码在无限循环中获取用户输入,该循环在两个条件下中断。我注意到当我输入大于9的数字时,程序返回不正确的结果。我想要做的是每次用户输入一个数字,将数字与之前的数字进行比较,并获得用户输入的最大和最小数字。
例如:
Please enter a number:
10
Max: 1, Min: 0, Count: 1
当Max应该是10而不是1.这是我的代码:
count = 0
largest = None
smallest = None
while True:
inp = raw_input('Please enter a number: ')
# Kills the program
if inp == 'done' : break
if len(inp) < 1 : break
# Gets the work done
try:
num = float(inp)
except:
print 'Invalid input, please enter a number'
continue
# The numbers for count, largest and smallest
count = count + 1
# Gets largest number
for i in inp:
if largest is None or i > largest:
largest = i
print 'Largest',largest
# Gets smallest number
for i in inp:
if smallest is None or i < smallest:
smallest = i
print 'Smallest', smallest
print 'Count:', count, 'Largest:', largest, 'Smallest:', smallest
难住了。
答案 0 :(得分:2)
你从raw_input
,
>>> x = raw_input("Enter number: ")
Enter number: 10
>>> type(x)
<type 'str'>
使用以下代码
for i in inp:
if largest is None or i > largest:
largest = i
print 'Largest',largest
# Gets smallest number
for i in inp:
if smallest is None or i < smallest:
smallest = i
print 'Smallest', smallest
迭代字符串。在第一个for
循环中,循环运行两个值,1
和0
,并且从'1' > '0'
开始,最大值获得1
,在另一个循环中类似,最小得到0
。
>>> '1' > '0'
True
如果您正在寻找找到最大和最小数字的方法,我可以建议以下内容:
count = 0
largest = None
smallest = None
while True:
inp = raw_input('Please enter a number: ')
# Kills the program
if inp == 'done' : break
if len(inp) < 1 : break
# Gets the work done
try:
num = float(inp)
except:
print 'Invalid input, please enter a number'
continue
# The numbers for count, largest and smallest
count = count + 1
# Gets largest number
if largest is None or num > largest: # Change 1
largest = num
print 'Largest',largest
# Gets smallest number
if smallest is None or num < smallest: # Change 2
smallest = num
print 'Smallest', smallest
print 'Count:', count, 'Largest:', largest, 'Smallest:', smallest
或者您可以将数字保留在列表中,输入done
后,打印出列表的max()
和min()
。
答案 1 :(得分:1)
也许我不明白这应该做什么,但你正在迭代数字并比较1和0。
不应该这个
for i in inp:
if largest is None or i > largest:
largest = i
和相应的最小的一个,是这样的吗?
if largest is None or inp > largest:
largest = inp
答案 2 :(得分:1)
您的代码循环遍历字符串'10'
,一次一个字符;这里,字符'1'
大于'0'
,因为它的ASCII码点更高。你真的没有建立一个数字列表。
使用列表将数字附加到:
numbers = []
while True:
# get input
numbers.append(num)
然后循环numbers
以计算最小值和最大值
额外提示:将smallest
和largest
名称分别设置为float('inf')
和float('-inf')
,而不是None
。这简化了对最小值和最大值的测试,因为这两个值保证是最大和最小的数字:
smallest = float('inf')
largest = float('-inf')
for i in numbers:
if i > largest:
largest = i
if i < smallest:
smallest = i
请注意,您可以在一个循环中执行这两项测试。