raw_input的迭代比较

时间:2013-07-07 19:03:50

标签: python python-2.7

我在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

难住了。

3 个答案:

答案 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循环中,循环运行两个值,10,并且从'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以计算最小值和最大值

额外提示:将smallestlargest名称分别设置为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

请注意,您可以在一个循环中执行这两项测试。