输出错误的Python程序

时间:2016-11-07 00:23:41

标签: 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

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

您要做的是使用max函数。您可以在一组数字上调用max,它将返回最大数字。

that.find(".data_div").data("bool", true);

答案 1 :(得分:0)

你应该在你的代码中使用int函数。

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

如果你不应该,Python比较数字[x]字符串和数字[max_index1]

在字典顺序中,“45”落后于“6”

答案 2 :(得分:0)

列表中的项目是字符串,因此按字典顺序订购:

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

您应该将列表中的项目转换为整数类型,以通过替换:

进行数字排序
input = sys.stdin.read()
numbers = input.split() 

使用:

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

使用内置input函数读取项目, strip 前导和尾随空格,字符串拆分为列表并转换每个项目使用列表推导列表到整数。

请注意,使用input作为名称不是一个好主意,因为它阴影内置input函数,您应该使用它来代替{{1} }。

答案 3 :(得分: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允许您将函数应用于数字的每个元素并返回结果。