Python:对奇数/偶数随机数求和生成 TypeError:'int' 对象不可迭代

Posted

技术标签:

【中文标题】Python:对奇数/偶数随机数求和生成 TypeError:\'int\' 对象不可迭代【英文标题】:Python: Summing Odd/Even Random Numbers Generates TypeError: 'int' object is not iterablePython:对奇数/偶数随机数求和生成 TypeError:'int' 对象不可迭代 【发布时间】:2017-01-12 07:28:08 【问题描述】:

是的,有人问过这个问题,但我似乎无法将答案应用于我的问题。这个问题有几个部分,这是我遇到的最大障碍。

我需要生成一个包含 10 到 90 之间的 10 个数字的随机列表。从这些随机数中,我需要将偶数和奇数的总和相加。

def playlist():
    nums = []
    for nums in range(10):
        # Get random list of 10 numbers
        my_nums = random.randint(10, 90)
        print (my_nums,end=' ')
        even = []
        odd = []
        for x in my_nums:
            if x % 2 == 0:
                even.append[x]
                print(even)
            else:
                odd.append[x]
                print(odd)

当我运行它时,有时我会得到一两个数字(通常是前两个奇数),但大多数情况下我会得到 TypeError: 'int' object is not iterable。

不会撒谎 - 我的第一语言是 php,而不是 Python,这对我来说是个大问题 :(

感谢任何帮助。

【问题讨论】:

您试图循环遍历my_nums,就好像它是一个数字列表,但它实际上只是一个整数。顺便说一句,您还将nums 定义为一个空列表,并在下一行中删除它并将一个整数放入其中。 my_nums 是一个整数。你不能超过一个数字。 @zvone - 我不知道为什么,但这就是任务要求创建一个名为 nums 的空列表 @andrew-l - 我将 for x in my_nums 修改为 for x in range(my_nums) 并停止了该错误 - 现在我只是让它打印 0 和 9 之间的奇数和偶数 lol 【参考方案1】:

随机创建列表

n = [random.randint(10,90) for x in range(10)]

获得偶数和赔率:

even = [x for x in n if x % 2 == 0]
odd = [x for x in n if x % 2 == 1]

【讨论】:

【参考方案2】:

你应该这样做。

def playlist():
    nums1 = []
    for nums in range(10):
        # Get random list of 10 numbers
        my_nums = random.randint(10, 90)
        nums1.append(my_nums)
        print my_nums


    even = []
    odd = []
    for x in nums1:
      if x % 2 == 0:
          even.append(x)
          print(even)
      else:
          odd.append(x)
          print(odd)


playlist()

【讨论】:

真的吗?,删除打印语句,我明白了,你得到的错误是什么? 抱歉,缩进有点不对劲。现在应该可以正常工作了。 函数编写完成后,在某处调用该函数。在脚本末尾,键入函数名称。这应该可以解决问题。 是的,划掉我之前的评论...我也忘记随机导入此列表正在打印,但我得到 21 30 46 10 10 71 47 42 84 53 Traceback(最近一次通话最后一次):文件“C:\Users\Bernadette\Desktop\0520 Intermediate Computer Programming\program_p1.py”,第 21 行,在 playlist() 文件“C:\Users\Bernadette\Desktop\0520 Intermediate Computer Programming\program_p1.py”中",第 18 行,播放列表奇数.append[x] TypeError: 'builtin_function_or_method' 对象不可下标 哦等等 - 等等!我将 even.append[x] 切换到 even.append(x) 并且我得到了更好的结果【参考方案3】:

您似乎误解了一些事情:

range(10) 会给你(看起来像)这个列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。 您可以将它与 for 循环一起使用 10 次 random.randint(10, 90) 会给你一个 10 到 90 之间的随机数(不是列表)

有了这些信息,我们可以将您的脚本更改为:

import random

even_sum = 0
odd_sum = 0
for number_of_turns in range(10):
    # Get a random number
    number_this_turn = random.randint(10, 90)
    print(number_this_turn,end=' ')
    if number_this_turn % 2 == 0:
        even_sum += number_this_turn
        print("Sum of even numbers so far:", even_sum)
    else:
        odd_sum += number_this_turn
        print("Sum of odd numbers so far:", odd_sum)

print("Final sum of even numbers:", even_sum)
print("Final sum of odd numbers:", odd_sum)

但我们可以做得更好。您将了解到,在 Python 中,您经常需要使用所需的术语定义一个列表(或可迭代的),然后对每个术语执行一些操作。因此我们可以将您的脚本更改为:

import random

even_sum = 0
odd_sum = 0

random_numbers = [random.randint(10, 90) for x in range(10)]

for number in random_numbers:
    print(number,end=' ')
    if number % 2 == 0:
        even_sum += number
        print("Sum of even numbers so far:", even_sum)
    else:
        odd_sum += number
        print("Sum of odd numbers so far:", odd_sum)

print("Final sum of even numbers:", even_sum)
print("Final sum of odd numbers:", odd_sum)

random_numbers = [random.randint(10, 90) for x in range(10)] 正在使用list comprehension 生成一个包含 10 个随机数的列表。然后,您可以对这些数字中的每一个进行 for 循环,在其中您可以添加到偶数的总和或赔率的总和。

您甚至可以像@Take_Care_ 的回答那样进一步简化它,但我想您在达到这个水平之前还有很多东西要学。

【讨论】:

我很欣赏这个@evensf - 尽管这是“中级计算机编程”,我对 Python 完全一无所知,我只是勉强通过了 Intro 课程,即使在 PHP 中,我仍然倾向于依靠我的程序方式 - 似乎每天我都越来越远离实际的动手编码:( “在你达到那个水平之前”啊,你对我太好了:) 获得支持。【参考方案4】:

正如提到的 cmets,你不能写 for x in 后跟一个数字。我猜你想要的是for x in range(my_nums) 而不是for x in my_nums

【讨论】:

是的,切换到 range(my_nums) 确实纠正了这个错误 但是 range(my_nums) 不会是随机整数,不是吗?【参考方案5】:

这是我最终需要的:

def playlist():
nums = []
for nums1 in range(10):
    # Get random list of 10 numbers
    my_nums = random.randint(10, 90)
    nums.append(my_nums)
    print (my_nums,end=' ')


even = []
odd = []
for x in nums:
  if x % 2 == 0:
      even.append(x)
  else:
      odd.append(x)
print ("\n")
print("Total of Even Numbers: ",sum(even))
print ("\n")
print("Total of Odd Numbers: ",sum(odd))

感谢大家的帮助...是的,我知道缺少运行函数的调用 - 就像我说的那样,这只是程序的一部分 :)

【讨论】:

【参考方案6】:

以下代码有效:

"""
I need to generate a random list of 10 numbers between 10 & 90. From those random numbers, I need to sum the totals of both the even and odd numbers.
"""
from random import randint

    MIN = 10
    MAX = 90
    sum_odds = sum_evens = 0

    for i in range(10):
        r = randint(MIN,MAX)
        if r % 2:
            sum_odds += r
        else:
            sum_evens += r
    return sum_evens, sum_odds

【讨论】:

以上是关于Python:对奇数/偶数随机数求和生成 TypeError:'int' 对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

python在100到200之间的一个随机的偶数?

C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码

java获取随机数(java获取随机数整数)

python 如何生成 2 1 4 3 6 5 8 7。。。的指定长度的序列?

Python|奇/偶数倒数求和之循环与递归的奥秘

谁能告诉我excel表格中如何将数字按奇数和偶数依次排列