2013-01-24 71 views
2

編寫一個程序,重複提示用戶輸入整數,直到用戶輸入'完成'。輸入完成後,打印出最大和最小的數字。如果用戶輸入除有效數字以外的任何內容,則嘗試/除外,並輸出適當的消息並忽略該數字。Python計算出最大數量?

我有這個到目前爲止,但我很困惑如何創建一個方法來比較最大值?我是編程新手,我只是在尋求幫助。在嘗試之前,我還要包含try和except塊嗎?然後錯誤的除外?

largest = None 
smallest = None 
while True: 
    num = raw_input("Enter a number: ") 
    if num == "done" : break 
     print num 

print "Maximum", largest 
+1

商店列表中的數字,列出有'MIN()'和'MAX()'方法。 –

+0

@AshwiniChaudhary:沒有必要存儲*全部*的用戶輸入。 – Johnsyweb

回答

-1

通過分配num到一個值,你是通過循環的每次迭代覆蓋它。改用列表。

num = [] 
finish = "n" 
while finish.lower() == "n" 
    try: 
     num.append(int(raw_input("Enter a number: "))) 
    except ValueError: 
     print "Not a number" 
    finish = raw_input("Would you like to add another number? (y/n): ") 

print max(num) 
+0

-1這將最大限度地按字母順序排列,可能會給出奇怪的結果 – wim

+0

是的,只要我點擊提交,我就編輯它,但你已經下了投票。保重 –

+0

我沒有看到任何編輯使此代碼工作。至少你需要使用numa.append(int(raw_input(...))) - 你可以使用float而不是int。另外一個嘗試/除了處理壞數據的異常。 – holdenweb

5
nums = [] 
while True: 
    n = raw_input("Enter a number: ") 
    if n == "done": 
    break 
    try: 
    nums.append(int(n)) 
    except ValueError: 
    print "Invalid input" 

print "Min: %d" % min(nums) 
print "Max: %d" % max(nums) 
+0

-1 OP顯然是python的新功能。這可以使用他的代碼來解決,不需要額外的概念(沒有'list',沒有'min()',沒有'max()')。 – slezica

0
numbers =[] 
while True: 
    num = raw_input("Enter a number: ") 
    if num == "done" : 
     break 
    else: 
     numbers.append(num) 

print max(numbers) 
print min(numbers) 

因此,邏輯是將號碼添加到列表,並使用功能,最大值和最小值。你可以編寫代碼來自己處理異常。

+2

當用戶輸入非數字字符串時會發生什麼? – elssar

+0

在py3x上會產生錯誤,而在py2x中會得到奇怪的結果。 –

+0

在Python 2.x中,我認爲它會按每個字符串的第一個字符的ascii值排序。然後是第二個如果是平局,等等。 – elssar

2
largest = None 
smallest = None 
first_number = True 

while True: 
    num = raw_input("Enter a number: ") 
    if num == "done" : break 

    try: 
     num = int(num) 
     if first_number: 
      largest = num 
      smallest = num 
      first_number = False 
     else: 
      largest = max(largest, num) 
      smallest = min(smallest, num) 
    except Exception, e: 
     print "Not Valid Input!!!" 
     continue 

print "Maximum", largest 
print "Minimum", smallest 
+0

謝謝!意義非凡! – user2006018

+0

-1'first_number'變量不是必需的。 'try'也很大,當它應該是1行。我不認爲這是一個好的解決方案。 – slezica

0
largest = None 
smallest = None 

while True: 
    num = raw_input("Enter a number: ") 
    if num == "done": break 
    if len(num) < 1 : break 
    try: 
    num=int(num) 
    except: 
    print "Invalid input" 
    continue 
    if num is smallest: 
     smallest = num 
    if num > largest: 
     largest = num 
print "Maximum is ", largest 
print "Minimum is ", smallest 
+0

這是你的偉大貢獻,但請稍微注意細節。我不會downvote,但代碼嚴重縮進,由於缺少白線而難以閱讀,當'=='在適當時會誤用'is',因爲它們都不合理,邏輯錯誤並且容易受到攻擊輸入錯誤。 – slezica

0

您可以用原來的程序非常小的修改做到這一點:只要保持最小和最大的數字標籤,你認爲他們。

largest = None 
smallest = None 

while True: 
    string = raw_input("Enter a number: ") 

    if string == "done": 
     break 

    try: 
     num = int(string) 
    except ValueError: 
     print "Not a number" 
     continue 

    if largest is None or num > largest: 
     largest = num 

    if smallest is None or num < smallest: 
     smallest = num 
0
largest = None 
smallest = None 

while True: 
num = raw_input('Enter a number: ') 

if num == 'done': 
    print 'Maximum is %s' % largest 
    print 'Minimum is %s' % smallest 
    break 

try: 
    num = int(num) 

    if smallest is None or num <= smallest: 
     smallest = num 

    if largest is None or num >= largest: 
     largest = num 

except: 
    print 'Invalid input'