Вывод слова по цифре Python
Напишите программу, которая проходит по всем числам от 1 до 100 и для каждого числа выводит это число, но если оно делится на три — выводит вместо числа «тыры», если на пять — «пыры», а если и на три и на пять — «тыры-пыры». Я сделал так только с цифрой 3, и не могу понять как делать дальше.
array = list(range(1,101))
array2 = []
for i in array:
if i%3 == 0:
i = "пыры"
array2.append(i)
else:
continue
print(array2)
Ответы (4 шт):
Вариант решения
arr = []
for i in range(1,101):
if i%15 == 0:
arr.append("тыры-пыры")
elif i%3 == 0:
arr.append("тыры")
elif i%5 == 0:
arr.append("пыры")
else:
arr.append(i)
print(arr)
немного изврата:
arr = [{0: "тыры-пыры", 3: "тыры", 5: "пары", 6: "тыры", 9: "тыры", 10: "пары", 12: "тыры"}.get(i % 15, i) for i in range(1,101)]
Да здравствуют однострочники:
arr = ['тыры-пыры' if i%15==0 else 'пыры' if i%5==0 else 'тыры' if i%3==0 else i for i in range(1, 101)]
Вот решение без делений и умножений. возможно оно быстрее (
div3, div5 = 1, 1
for i in range(1,101):
text3 = "тыры" if div3 == 3 else ""
text5 = "пыры" if div5 == 5 else ""
text_answer = "".join([text3,
"-" if div3 == 3 and div5 == 5 else "",
text5
])
print(text_answer if text_answer else i)
div3 = div3 + 1 if div3 != 3 else 1
div5 = div5 + 1 if div5 != 5 else 1
Вот сравнение и увы мой способ хуже.... Интересно почему. наверное из за принта в цикле
228 µs ± 19.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
13.1 ms ± 1.5 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
Конечно, у меня нет результирующего списка значений, но в задаче о нем ни слова. Если же список таки нужен, то вот:
rez = [i for i in range(1,101)] div3, div5 = 1, 1 for i in range(1, 101):
text3 = "тыры" if div3 == 3 else ""
text5 = "пыры" if div5 == 5 else ""
text_answer = "".join([text3,
"-" if div3 == 3 and div5 == 5 else "",
text5
])
if text_answer:
rez[i-1] = text_answer
div3 = div3 + 1 if div3 != 3 else 1
div5 = div5 + 1 if div5 != 5 else 1
print(rez)
с результатом
257 µs ± 10.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Как не странно, мой вариант медленнее, интересно - почему.
Вариант от Zhihar тоже лучше моего:
244 µs ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)