2016-11-07 53 views
1

編寫代碼,找出次數最多的列表輸出錯誤的Python程序

import sys 

print ("Enter number of elements \n") 

i = int(sys.stdin.read()) 

print ("Enter numbers \n") 

input = sys.stdin.read() 

numbers = input.split() 

print ("Number of elements in list",len(numbers)) 

if (len(numbers)<=i): 

    print ("Valid Inputs \n", len(numbers)) 

    max_index1=-1 

    for x in range(len(numbers)): 

     if ((max_index1==-1)or(numbers[x] >= numbers[max_index1])): 

      max_index1=x 

      print ("max index is",max_index1) 

print ("Highest input number is", numbers[max_index1]) 

在執行這個代碼,我下面得到正確的輸出:

Enter number of elements 

5 
Enter numbers 

10 45 32 23 21 
Number of elements in list 5 
Valid Inputs 

5 
max index is 0 
max index is 1 
Highest input number is 45 

但有時輸出是完全錯誤的:

Enter number of elements 

5 
Enter numbers 

10 45 32 6 21 
Number of elements in list 5 
Valid Inputs 
5 
max index is 0 
max index is 1 
max index is 3 
Highest input number is 6 

有人能幫我解決這段代碼嗎?

+0

請縮進您的代碼(例如使用Alt + K)。 –

+0

您是否知道'input'是一個保留字,您的代碼被阻止了? – boardrider

回答

1

你想要做的就是使用max函數。您可以在數組數組上調用max,並返回最大數字。

num_array = [5, 3, 6, 12, 3, 5] 
largest = max(num_array) 
print("Max num: {}".format(largest)) 
0

你應該在你的代碼中使用int函數。

int(numbers[x]) >= int(numbers[max_index1])) 

如果你不應該,Python的比較數字[X]字符串和 「45」 的數字[max_index1]

在字典順序的背後,是 「6」

+0

肯定會給這個嘗試,但類型轉換將如何幫助這裏? – sudip

+0

int typecasting使字符串整數。例如,int(「45」)變爲整數45.如果不使用int類型轉換,則只需比較「45」和「6」。因此,ascii代碼中的「4」小於「6」,您的答案將是錯誤的。我想你想比較整數。 – Bakyuns

0

在清單中的項目是字符串,所以它們被責令字典順序

>>> '6' > '45' 
True 
>>> 6 > 45 
False 

應該轉換列表中的項目爲整型做NUM erical順序更換:

input = sys.stdin.read() 
numbers = input.split() 

有了:

numbers = [int(i) for i in input().strip().split()] # use 'raw_input' for Python 2 

,在使用內置input函數讀取項目,開頭和結尾的空格,分裂串入一個列表和轉換列表中的每個項目以整數使用列表理解

注意,使用input的名字是不是一個好主意,因爲它陰影內建input功能,你或許應該使用代替sys.stdin.read

0

當前您的列表numbers是一個字符串列表。爲了表明這一點,你可以打印數字。

>>> print(numbers) 
['10', '42', '32', '6', '21'] 

在Python 2.7版,一個字符串可以用另一個字符串(可能)令人驚訝的結果

>>> '6' > '42' 
True 

進行比較,以避免這個問題,你可以改變數字是整數列表

>>> numbers = map(int, numbers) 
>>> print(numbers) 
[10, 42, 32, 6, 21] 

其中map允許您將函數應用於每個數字元素並返回結果。