2013-07-07 48 views
0

我有一個小的max_min程序,我正在使用Ubuntu 13.04上的python 2.7編寫。該代碼將用戶輸入內部的一個無限循環在兩個條件中斷開。我注意到,當我輸入一個大於9的數字時,程序返回錯誤的結果。我想要做的是每次用戶輸入一個數字時,將該數字與前一個數字進行比較,並獲取用戶輸入的最大和最小數字。raw_input的迭代比較

例如:

Please enter a number: 
10 
Max: 1, Min: 0, Count: 1 

當最大應爲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 

難住了。

回答

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和0比

不應該在該

for i in inp: 
    if largest is None or i > largest: 
     largest = i 

和相應的最小一,是這樣的呢?

if largest is None or inp > largest: 
    largest = inp 
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 

注意,您可以在一個循環做兩個測試。