函数给我错误无法解决的类型:str()> INT()

时间:2016-10-26 16:23:34

标签: python string python-3.x

count_pos 应该输入一个数字列表并返回该列表中的正值数量。

def count_pos():
    numbers=list(input("Please enter a list of numbers separated by commas: "))
    count=0
    for number in numbers:
        if number > 0:
           count += 1
           add=sum(1 for number in numbers if number > 0)
           return add

当我输入

  

-1,2,-5,0,3

我收到错误

Traceback (most recent call last):
  File "so.py", line 11, in <module>
    print (count_pos())
  File "so.py", line 6, in count_pos
    if number > 0:
TypeError: unorderable types: str() > int()

4 个答案:

答案 0 :(得分:1)

input返回单个字符串。

list(input(...))返回一个包含单个字符串的列表。

for number in numbers:number分配给该字符串,因此它现在是一个字符串。

if number > 0然后检查number中的字符串是否大于0

无法比较字符串和整数。

据推测,你想要做的就是改变这一行:

numbers=list(input("Please enter a list of numbers seperated by commas"))

对此:

numbers=map(float, list(input("Please enter a list of numbers seperated by commas").split(',')))

这会将字符串从input转换为字符串列表(它会将逗号分隔的值拆分),然后map(float, ...)会将float()函数应用于每个元素该列表将该列表转换为浮动列表。

答案 1 :(得分:1)

因为输入会给你一个字符串,字符串将被转换成单个字符串文字的集合,所以如果你输入

1 2 3

您的列表将是字符串集合,其中空格无法转换为int或比较

[' ', '1', ' ', '2', ' ', '3']

并且在您的if声明中,这会在第一次比较时向您显示错误if ' ' > 0

所以使用它将您的输入转换为整数列表

numbers=list(map(int,input("Please enter a list of numbers seperated by commas").strip().split()))

答案 2 :(得分:1)

问题

您发布的代码实际上适用于Python 2.7;它的Python 3没有列表(input())功能。

幸运的是,您的变量名称非常清晰。其他人已经详细说明了当前的问题 - 我对我认为特别好的解释进行了投票。让我们在不损害您的程序设计的情况下解决这个问题:

def count_pos():
user_input = input("Please enter a list of numbers seperated by commas"))
# user_input is a raw string of the input, such as "1, 2, 3, 4"
# break this into individual numbers:
str_numbers = user_input.split(',')

# str_numbers would now be ["1", " 2", " 3", " 4"]
# These individual strings are suitable to convert to integer
numbers = [int(str_num) for str_num in str_numbers]

# NOW we can continue with the rest of your program, as written:
count=0
for number in numbers:
    if number > 0:
       count += 1
       add=sum(1 for number in numbers if number > 0)
       return add

额外清理

首先,在循环中找到第一个正数后返回; 计数永远不会高于1.但是,您将得到正确的答案,因为您的 add = 语句实际上取代了循环的功能。你可以完全摆脱循环,只需使用

return sum(1 for number in numbers if number > 0)

如果你需要在循环中执行此操作,那么让它运行到最后,以便它可以完成它的工作。只有这样才能返回结果:

for number in numbers:
    if number > 0:
       count += 1

return count

编辑记事

您的原始文字说count_pos“需要一个数字列表”。这通常意味着调用程序负责提供该列表,并且您的函数必须具有输入参数,而不是读取用户输入。在这种情况下,通过更正函数标题并删除输入和转换,并仅使用单行解决方案来解决整个问题:

def count_pos(numbers):
    return sum(1 for number in numbers if number > 0)

答案 3 :(得分:0)

您收到此特定错误的原因实际上是number > 0。左侧是一个字符串(正如我解释的那样),右侧是一个整数。并且Python不允许你比较字符串和整数。

list来电并不像您期望的那样有效。 input()会返回一个字符串,如果您执行list("A_STRING"),则会获得包含每个字符(["A", "_"…])的列表。

您可能希望查找str.split(),它将字符串与给定的分隔符分开并返回字符串列表。然后,您实际上需要将列表中的每个字符串转换为数字(例如,使用int(THE_STRING)float(THE_STRING))。

这样的事情:

text = input(…)
elements = text.split(",")
numbers = [int(element) for element in elements]