2016-11-07 57 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允许您将函数应用于每个数字元素并返回结果。