2014-02-14 90 views
0

我需要找到用戶輸入的最大數字,但是我不能將最大數字定義爲數字,就像我定義的「最大= -9999999」,有什麼建議? 的「clargest」是計算有多少時間最多發生如何有效地跟蹤最大的用戶輸入值?

largest = -9999999 

clargest = 0 

while num != 0 : 
    num = input("Enter your number or type 0 to end: ") 
    if (num[0] == "-" and num[1:].isdigit()) or num.isdigit(): 
     num = int(num) 
     if num != 0: 
      if num > largest: 
       clargest = 1 
      elif num == largest: 
       clargest = clargest + 1 
      largest = max(largest,num) 
+1

你是什麼意思的「不能定義最大的數字」?你的意思是你不能任意地聲明「用戶輸入的最大數字是12」,或者你的意思是你必須將它表示爲某種非數字數據類型,或者是什麼? – user2357112

+0

它看起來像你所做的很接近你想要的東西。你沒有初始化'num',並且你的輸入驗證有點過分,但'最大'和'clargest'邏輯似乎沒問題。 – user2357112

+0

我不能說最大= -999,因爲如果用戶輸入-9999 – Frangello

回答

0

您有幾種選擇。以下是其中兩個:

選項1: 保留用戶輸入的所有數字的列表,對其進行排序並取最後一個。

選項2: (我認爲這是你正在嘗試做的) 記錄到目前爲止輸入的最大數字。而不是將最大值定義爲一個大的負數,而只是圍繞一個布爾值來表示輸入是否是第一個數字。用戶輸入的第一個數字總是最大的。對於您,具體而言,當clargest爲0時,您可以將largest設置爲用戶輸入。

+0

選項3:在循環之前輸入內容 –

+0

不需要布爾值,可以使用'clargest == 0'只能發生在第一個數字的事實。 –

+0

排序?爲什麼排序?如果你保留一個列表,「最大=最大(l); clargest = l.count(最大)'。 – user2357112

2

您可以從數學上有意義的largest = float('-inf')開始,因爲用戶只能輸入(帶符號)整數。

邊注:有寫你的循環的一個更簡單的方法:

while num != 0 : 
    num = input("Enter your number or type 0 to end: ") 
    if (num[0] == "-" and num[1:].isdigit()) or num.isdigit(): 
     num = int(num) 
     if num != 0: 
    # ... keep track of largest 

將作爲簡單:

while True: 
    try: 
     num = int(input("Enter...")) 
    except ValueError: 
     continue 
    if num == 0: 
     break 
    # ... keep track of largest 

此使用推薦「這是更好地請求原諒比許可」 (try)。它也消除了num != 0的重複。 「這是數字」的測試也比較明顯。將num同時作爲字符串和數字的需求也被刪除。

相關問題