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()
答案 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]