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 行,在您似乎误解了一些事情:
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' 对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码