Привет, у нас первый снег:
* . . . *
. *
.* * . *
.
* . .
* . * *
* * * . .
* .
* . .
. . * * *
. . . .
. .
. .
* . . . .
* . *
. * * *
. . . . *.
* * ** *
Можно ли красиво написать такой генератор рандомного снега в одну строчку, например list comprehension'ом?
import random
freq = 0.95
flakes = ['*', '.']
def snow(x, y):
for _ in range(y):
s = ''
for _ in range(x):
if random.random() > freq:
s += random.choice(flakes)
else:
s += ' '
print s
snow(70, 20)
Думал поначалу нагенерить снежинок, потом ljust и перемешать, но random.shuffle() меняет in-place, не возвращая модифицированной строки.
Алсо! В данном примере s при присваивании каждый раз указывает на новый объект, поскольку строки неуязвимы — как это сказывается на потреблении помяти? Сборщик какой-нибудь подчищает сразу же?