0

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

难住了。

4

3 回答 3

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()

于 2013-07-07T19:08:29.957 回答
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
于 2013-07-07T19:08:24.910 回答
1

您的代码循环遍历 string '10',一次一个单独的字符;这里的字符'1'大于'0'因为它的 ASCII 代码点更高。在任何时候,您实际上都没有建立一个数字列表。

使用列表将数字附加到:

numbers = []

while True:
    # get input

    numbers.append(num)

然后循环numbers计算最小值和最大值。

额外提示:将您的smallestlargest名称分别设置为float('inf')and float('-inf'),而不是None. 这简化了最小值和最大值的测试,因为这两个值保证是最大和最小的数字:

smallest = float('inf')
largest = float('-inf')

for i in numbers:
    if i > largest:
        largest = i
    if i < smallest:
        smallest = i

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

于 2013-07-07T19:08:45.527 回答