【问题标题】:manipulate list in python在python中操作列表
【发布时间】:2019-09-24 10:19:05
【问题描述】:

我正在做一个 python 挑战,我不能更进一步...... 我需要验证向量中的数字是否是素数。 喜欢:

  • 矢量 = [2,5,12]
    • 2 是素数(真)
    • 5 是素数(真)
    • 12 不是素数(FALSE)

这是我到目前为止的代码:

vetor = [ ]

def is_prime():
    x = vetor
    if x == 1:
        return False
    elif x == 2:
        return True


    for i in range(x):
        if (x % i) != 0:
            return True
        else:
            return False




def number():
    value = int(input('Write an integer number bigger than 1: '))
    if value >= 1:
        vetor.append(value)
        return number()
    elif value < 0:
        return number()
    elif value == 0:
        return is_prime()

print(number())

但是这样做,Python 会返回: TypeError: 'list' 对象不能被解释为整数

我可以做些什么来处理我列表中的数据?

【问题讨论】:

  • 您已经定义了vetor = [ ],它是一个list 数据类型和x = vetor,当您将listinteger 数据类型在if x == 1: 和@987654328 中进行比较时,它们会发生冲突@。您需要遍历x 列表中的每个元素并进行比较测试,即for i in x: if i == 1: 等。

标签: python list-manipulation


【解决方案1】:

试试这个:

vetor = [ ]

def is_prime(x):
    if x == 1:
        return False
    elif x == 2:
        return True


    for i in range(1, x):
        if (x % i) != 0:
            return True
        else:
            return False




def number():
    value = int(input('Write an integer number bigger than 1: '))
    if value >= 1:
        vetor.append(value)
        return number()
    elif value < 0:
        return number()
    elif value == 0:
        for x in vetor:
            if is_prime(x):
                print(x, 'is prime')
            else:
                print(x, 'is not prime')

print(number())

【讨论】:

    【解决方案2】:

    您尝试根据整数(数据类型)值(1 或 2)评估“整个”列表(数据类型)的值,然后您再次使用整个列表,因为它是单个整数值.您应该处理列表中的每个值并单独检查。

    例如,您可以使用 for-each 循环来做到这一点:

    for value in vetor:
        #do wahtever you want with 'value'
    

    【讨论】:

      【解决方案3】:

      我建议让is_prime 接受一个整数作为参数。那么它只是一个接受整数并输出布尔值的纯函数。

      我还注意到您的 is_prime 实现中存在问题。在您的if-else 语句中,无论在该语句中发生什么,该函数都会返回,因此 for 循环将始终在仅一次迭代后停止。如果您检查的除数​​中的 所有 个除数除以数字,则您应该只返回 False:

      import math
      
      def is_prime(n):
          if n <= 1:
              return False
          for d in range(2, int(math.sqrt(n))+1):
              if n % d == 0:
                  return False
          return True
      
      # >>> is_prime(7)
      # True
      # >>> is_prime(8)
      # False
      

      我还认为迭代编写程序会更清晰,而不是递归(您的 number 函数当前调用自身)。这可能看起来像

      vector = []
      while True:
          value = int(input('Write an integer bigger than 1: '))
          if value == 0:
              break
          elif value > 0:
              vector.append(value)
      for n in vector:
          print(n, is_prime(n))
      
      # prints something like:
      #
      # 1 False
      # 2 True
      # 11 True
      

      【讨论】:

        猜你喜欢
        • 2021-04-01
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多