【问题标题】:Multiply digits of number of list python [closed]将列表python数量的数字相乘[关闭]
【发布时间】:2021-11-20 19:50:47
【问题描述】:

我有 3 位素数数组:

for num in range(100, 1000):
     if num > 1:
         for i in range(2, num):
             if (num % i) == 0:
                 break
             else:
             numere_prime.append(num)

名单是:

numere_prime = [[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163...]

我需要的是乘以一个数字的每个数字(例如 101 = 1 * 0 * 1),然后它显示乘以后等于用户输入的所有 numere_prime。 到目前为止我做了什么:

    for elem in numere_prime:
        digits = [int(x) for x in str(elem)] # split digits into [1,0,1][1,0,3]...
        for n in list(digits):
            // n * n_at_next_index * n_at_next_index
            if //result of multiplying == //number set by input:
            //append digits to result list

结果应该是:input (9) = [191, 313, 331, 911]

【问题讨论】:

    标签: python list split digits


    【解决方案1】:
    numere_prime = [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157]
    digi_mult_dict = {}
    for elem in numere_prime:
        c = elem % 10
        b = int((elem % 100 - c)/10)
        a = int((elem - b - c)/100)
        mult = a * b * c
        digi_mult_dict[elem] = mult
    numero = input("input a number")
    for key, value in digi_mult_dict.items():
        if int(value) == int(numero):
            print(key)
    

    【讨论】:

      【解决方案2】:
      numere_prime = []
      for num in range(100, 1000):
          prime = True
          for i in range(2, num):
              if (num % i) == 0:
                  prime = False
          if prime:
              numere_prime.append(num)
      
      
      def prime_digit_prod(x):
          output = []
          for elem in numere_prime:
              digits = [int(x) for x in str(elem)] # split digits into [1,0,1][1,0,3]...
              result = 1
              for n in digits:
                  result *= n
              if result == x:
                  output.append(elem)
          return output
      
      print(prime_digit_prod(9))
      

      输出:

      [191, 313, 331, 911]
      

      【讨论】:

        【解决方案3】:
        primes = [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163]
        a = int(input('enter a nmber :'))
        primes_useful = []
        for i in primes :
            product = 1
            for k in str(i):
                product *= int(k)
            if product == a :
                primes_useful.append(i)
        
        print(primes_useful)
        

        【讨论】:

          【解决方案4】:

          您的主要算法是错误的。当任何因素失败时,您不能只是追加到列表中,您必须知道所有因素都失败了。而且您不必一路搜索到num;您只需搜索sqrt(num)。由于最大值是 1000,因此您可以在 33 处停止。此外,检查 num > 1 是愚蠢的,因为您从 100 开始范围。而且您不必将 digits 转换为列表;这已经是一个列表了。

          您可以通过在get_primes 中使用any 函数和在filter_primes 中使用yield 来缩短此时间。你稍后会谈到。

          def get_primes():
              numere_prime = []
              for num in range(100, 1000):
                  prime = True
                  for i in range(2, 34):
                     if (num % i) == 0:
                        prime = False
                        break
                  if prime:
                     numere_prime.append(num)
              return numere_prime
          
          def filter_primes(primes, magic):
              res = []
              for elem in primes:
                  digits = [int(x) for x in str(elem)] 
                  product = 1
                  for n in digits:
                      product *= n
                  if product == magic:
                      res.append(elem)
              return res
          
          numere_prime = get_primes()
          
          inp = int(input("Your value: "))
          
          result = filter_primes(numere_prime, inp)
          print(result)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-06-24
            • 1970-01-01
            • 1970-01-01
            • 2012-10-28
            • 2020-10-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多