Как я могу заменить элементы в списке в python3, используя условие? - PullRequest
0 голосов
/ 21 января 2020

Напишите функцию, которая печатает все целые числа от 0 до 100: для каждого числа, которое делится на 7 или имеет вместо git 7 print ‘boom’ сам номер.

Мое решение до сих пор:

def boom():
r = []
for i in range(1, 100):
    if i % 7 == 0 or '7' in str(i):
        r.append("boom")
    else:
        r.append(i)
return r

print (boom ())

Помощь: AkshayNevrekar

Вопрос: Вы находите лучший способ решить эту проблему c? лучший алгоритм? Спасибо!

Ответы [ 3 ]

4 голосов
/ 21 января 2020

Вы можете попробовать это.

Вам необходимо проверить, делится ли i на 7 , если да, тогда добавьте 'BOOM' в свой список результатов. Теперь, если число имеет номер di git 7 или его нужно проверять, вы можете набрать i в строку и использовать in для проверки наличия или отсутствия 7. Если i не делится на 7 и в нем нет 7, просто добавьте i к вашему списку результатов.

def boom():
    return ['BOOM' if i%7==0 or '7' in str(i) else i for i in range(1,101)]
print(boom())

[1, 2, 3, 4, 5, 6, 'BOOM', 8, 9, 10, 11, 12, 13, 'BOOM', 15, 16, 'BOOM', 18, 19, 20, 'BOOM', 22, 23, 24, 25, 26, 'BOOM', 'BOOM', 29, 30, 31, 32, 33, 34, 'BOOM', 36, 'BOOM', 38, 39, 40, 41, 'BOOM', 43, 44, 45, 46, 'BOOM', 48, 'BOOM', 50, 51, 52, 53, 54, 55, 'BOOM', 'BOOM', 58, 59, 60, 61, 62, 'BOOM', 64, 65, 66, 'BOOM', 68, 69, 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 80, 81, 82, 83, 'BOOM', 85, 86, 'BOOM', 88, 89, 90, 'BOOM', 92, 93, 94, 95, 96, 'BOOM', 'BOOM', 99, 100]

def boom(n:int,inp:str):
    return [inp if i%7==0 or '7' in str(i) else i for i in range(1,n+1)]

print(boom(20,'7 used to be here'))

for i in boom(20,'7 used to be here'):
    print(i)

Здесь n - это диапазон, а inp - строка, которая заменяет число, содержащее 7, или делится на 7.


output

[1, 2, 3, 4, 5, 6, '7 used to be here', 8, 9, 10, 11, 12, 13, '7 used to be here', 15, 16, '7 used to be here', 18, 19, 20]

1
2
3
4
5
6
7 used to be here
8
9
10
11
12
13
7 used to be here
15
16
7 used to be here
18
19
20

Попробуйте это завершите boom().

def boom(n=100,inp='BOOM'):
    return [inp if i%7==0 or '7' in str(i) else i for i in range(1,n+1)]
  1. Если вызывается boom() без параметров, то он считает n 101 , а inp - 'BOOM'.
  2. Если вызывается boom(n=x), то он считает диапазон x + 1 , а inp - 'BOOM'
  3. Если вызывается boom(inp=any_string), то он считает диапазон 101 и inp как any_string.
  4. если вызывается boom(n=x,inp=any_string), то он считает диапазон x + 1 , а inp - any_string.

вывод

>>> boom()
[1, 2, 3, 4, 5, 6, 'BOOM', 8, 9, 10, 11, 12, 13, 'BOOM', 15, 16, 'BOOM', 18, 19, 20, 'BOOM', 22, 23, 24, 25, 26, 'BOOM', 'BOOM', 29, 30, 31, 32, 33, 34, 'BOOM', 36, 'BOOM', 38, 39, 40, 41, 'BOOM', 43, 44, 45, 46, 'BOOM', 48, 'BOOM', 50, 51, 52, 53, 54, 55, 'BOOM', 'BOOM', 58, 59, 60, 61, 62, 'BOOM', 64, 65, 66, 'BOOM', 68, 69, 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 'BOOM', 80, 81, 82, 83, 'BOOM', 85, 86, 'BOOM', 88, 89, 90, 'BOOM', 92, 93, 94, 95, 96, 'BOOM', 'BOOM', 99, 100]
>>> boom(50)
[1, 2, 3, 4, 5, 6, 'BOOM', 8, 9, 10, 11, 12, 13, 'BOOM', 15, 16, 'BOOM', 18, 19, 20, 'BOOM', 22, 23, 24, 25, 26, 'BOOM', 'BOOM', 29, 30, 31, 32, 33, 34, 'BOOM', 36, 'BOOM', 38, 39, 40, 41, 'BOOM', 43, 44, 45, 46, 'BOOM', 48, 'BOOM', 50]
>>> boom(inp='hehe')
[1, 2, 3, 4, 5, 6, 'hehe', 8, 9, 10, 11, 12, 13, 'hehe', 15, 16, 'hehe', 18, 19, 20, 'hehe', 22, 23, 24, 25, 26, 'hehe', 'hehe', 29, 30, 31, 32, 33, 34, 'hehe', 36, 'hehe', 38, 39, 40, 41, 'hehe', 43, 44, 45, 46, 'hehe', 48, 'hehe', 50, 51, 52, 53, 54, 55, 'hehe', 'hehe', 58, 59, 60, 61, 62, 'hehe', 64, 65, 66, 'hehe', 68, 69, 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 'hehe', 80, 81, 82, 83, 'hehe', 85, 86, 'hehe', 88, 89, 90, 'hehe', 92, 93, 94, 95, 96, 'hehe', 'hehe', 99, 100]
>>> boom(n=77,inp='77777')
[1, 2, 3, 4, 5, 6, '77777', 8, 9, 10, 11, 12, 13, '77777', 15, 16, '77777', 18, 19, 20, '77777', 22, 23, 24, 25, 26, '77777', '77777', 29, 30, 31, 32, 33, 34, '77777', 36, '77777', 38, 39, 40, 41, '77777', 43, 44, 45, 46, '77777', 48, '77777', 50, 51, 52, 53, 54, 55, '77777', '77777', 58, 59, 60, 61, 62, '77777', 64, 65, 66, '77777', 68, 69, '77777', '77777', '77777', '77777', '77777', '77777', '77777', '77777']
1 голос
/ 21 января 2020

Я думаю, вам нужно:

def boom(n):
    r = []
    for i in range(1,n+1):
        if i %7==0 or '7' in str(i):
            r.append("boom")
        else:
            r.append(i)
    return r

print(boom(100)) 
0 голосов
/ 21 января 2020
def Boom():
  return list(map(lambda a: 'Boom' if (a % 7 == 0 or '7' in str(a)) else a, range(0, 100)));

print(Boom())

['Boom', 1, 2, 3, 4, 5, 6, 'Boom', 8, 9, 10, 11, 12, 13, 'Boom', ..., 99]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...