【问题标题】: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

标签: python random range typeerror iterable


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2015-04-06
        • 2013-10-31
        • 2016-02-24
        • 1970-01-01
        • 2017-05-12
        • 2015-06-18
        • 2020-06-10
        • 2017-09-11
        相关资源
        最近更新 更多