умножение цифр на квадраты чисел в диапазоне - PullRequest
0 голосов
/ 29 октября 2018

Я хочу получить список, в котором указаны конкретные требования из диапазона мой код может только умножать цифры чисел в списке. Я хочу получить несколько цифр квадратов чисел в списке

Например: Определенный диапазон = (1200)

wanted_list = [1 ^ 2,2 ^ 2,3 ^ 2, ..., (34 = 3 ^ 2 * 4 ^ 2), (35 = 3 ^ 2 * 5 ^ 2), ..., (199 = 1 ^ 2 * 9 ^ 2 * 9 ^ 2)]

Вот мой код :

def mult(liste):
    a=1
    for i in liste:
        a*=i       #I think the problem is here
    return a

listemm = [x for x in range(1,200)]
print(listemm)
qe= [mult(int(digit) for digit in str(numb)) for numb in listemm]
print(qe)

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я бы сделал это так:

r = range(1, 200)


def reduce_prod(n):
    p = 1
    for i in str(n):
        p *= int(i)**2
    return p


wanted_list = [reduce_prod(x) for x in r]

, который производит:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 0, 1, ...]
#                                 ^
#                                 from 10 -> 1^2 * 0^2 = 0
0 голосов
/ 29 октября 2018

Вы были очень близки. Вот исправленная версия вашей собственной попытки для диапазона до 30. Проблема заключалась в том, что ваша функция работала только для двух цифр. Здесь я использую условие if-else, чтобы проверить, меньше ли число 10. Если это так, я просто возводю его в квадрат, иначе я отправляю его вашей функции.

В функции вы не возводили в квадрат числа. Вам также не нужно listemm. Вы можете напрямую использовать range в своем понимании списка.

def mult(liste):
    a=1
    for i in liste:
        a*=i**2       # Square here (the problem was partly here)
    return a

qe= [numb**2 if numb<10 else mult(int(digit) for digit in str(numb)) for numb in range(1,30)]
print(qe)

# [1, 4, 9, 16, 25, 36, 49, 64, 81, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
...