2016-11-07 5 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 сравнивать числа [х] строка и число [max_index1]

В словарном порядке, "45" позади "6"

+0

уверен, что это попробует, но как здесь поможет приведение типов? – sudip

+0

int typecasting делает целое число. Например, int («45») стал целым числом 45. Если не использовать int typecasting, вы просто сравниваете «45» и «6». Поэтому, поскольку «4» меньше, чем «6» в коде ascii, ваш ответ будет неправильным. Я думаю, вы хотите сравнить целые числа. – Bakyuns

0

элементов в списке являются строками, поэтому они заказанного лексически:

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

Вы должны преобразовать элементы в списке целого типа, чтобы сделать пит 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 позволяет применить функцию к каждому из элементов чисел и вернуть результат.