Python(int)错误

时间:2013-11-25 23:14:14

标签: python

import random

    numbers = int(input("Please, enter number {}: ".format(i+1)) for i in range(7))

# will display prompt like "Please, enter number 1:"
    print ("numbers entered:"), numbers # this will print the entered numbers

    positives = [num for num in numbers if num > 0]
    negatives = [num for num in numbers if num < 0]

# loop ends here
    print ("Sum of negative numbers is :", sum(negatives))
    print ("Average negative number is :", sum(negatives)*1.0/len(negatives))
    print ("Sum of positive numbers is :", sum(positives))
    print ("Average positive number is :", sum(positives)*1.0/len(positives))

我的问题是,当我在空闲中运行时,我收到以下错误:  “int()参数必须是字符串或数字,而不是'生成器' 不知道如何解决这个问题...我知道在使用python 3时我必须在输入之前使用(int)来调用整数,但我不确定如何使其工作。

3 个答案:

答案 0 :(得分:2)

如错误所示,int不支持生成器表达式。但是,你试着在这里给它一个:

numbers = int(input("Please, enter number {}: ".format(i+1)) for i in range(7))

以上代码与此相同:

numbers = int(
              # This is a generator expression
              input("Please, enter number {}: ".format(i+1)) for i in range(7)
          )

我认为你要做的是:

numbers = [int(input("Please, enter number {}: ".format(i+1))) for i in range(7)]

参见下面的演示:

>>> numbers = [int(input("Please, enter number {}: ".format(i+1))) for i in range(7)]
Please, enter number 1: 1
Please, enter number 2: 2
Please, enter number 3: 3
Please, enter number 4: 4
Please, enter number 5: 5
Please, enter number 6: 6
Please, enter number 7: 7
>>> numbers
[1, 2, 3, 4, 5, 6, 7]
>>>

答案 1 :(得分:0)

import random

numbers = []
for i in range(7):
    numbers.append(int(input("Please, enter number {}: ".format(i+1))))

# will display prompt like "Please, enter number 1:"
print ("numbers entered:"), numbers # this will print the entered numbers

positives = [num for num in numbers if num > 0]
negatives = [num for num in numbers if num < 0]

# loop ends here
if len(negatives) > 0:
    print ("Sum of negative numbers is :", sum(negatives))
    print ("Average negative number is :", sum(negatives)*1.0/len(negatives))
if len(positives) > 0:
    print ("Sum of positive numbers is :", sum(positives))
    print ("Average positive number is :", sum(positives)*1.0/len(positives))

答案 2 :(得分:0)

该错误意味着它所说的 - int()只接受字符串或对象,并且您尝试在生成器表达式上调用int。将它简化为更简单的一点,你说int( f(x) for x in range(7) )int( [1, 2, 3, 4, 5, 6, 7] )一样有意义。 Python不会神奇地在列表(或生成器或迭代器或......)中应用函数。

虽然您可以通过添加一些字符(如其他海报所建议的那样)将其简单地投入到列表理解中,但这个问题的本质表明您只是在学习Python。编写丑陋,复杂的表达式是一种不好的习惯,使代码难以阅读/维护/扩展。为了便于阅读,您应该使用实际的循环。

numbers = []
for i in range(7):
    prompt = "Please, enter number {}: ".format(i+1)
    user_input = input(prompt)
    user_num = int(user_input)
    numbers.append(user_num)

它占用了更多的行,但更容易遵循或修改。假设您想删除输入或拒绝素数的数量限制 - 您认为您能够轻松地使用原始版本吗?