Как эту программу сделать короче?

Нужно выводить случайные символы в несколько столбцов.

import random

n = str()
n1 = str()
n2 = str()
n3 = str()
n4 = str()
n5 = str()
n6 = str()
n7 = str()
n8 = str()
n9 = str()
n10 = str()

while True:
    n = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n1 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n3 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n4 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n5 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n6 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n7 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n8 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n9 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    n10 = random.choice (["!", "№", "#", "$", "%", "@", "^", "&", "*"])
    print(n, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10)

Ответы (4 шт):

Автор решения: R4mBLe_

Массив можете занести в array, внутри while True сделать цикл до десяти, где можно использовать локальную переменную, выбирать рандомом из массива и выводить

→ Ссылка
Автор решения: Dmitry
from random import choice
a = ["!", "№", "#", "$", "%", "@", "^", "&", "*"]
n = 10 # кол-во столбцов
while True:
    for i in range(n):
        print(choice(a), end="")
    print()
→ Ссылка
Автор решения: MarianD
import random

SYMBOLS = "!№#$%@^&*"
HOW_MANY = 11

random_symbols = random.choices(SYMBOLS, k=HOW_MANY)

print(random_symbols)

Объяснение:

Для повторного выбора случайного символа из того же самого множества лучше применить функцию choices() (вместо choice()), которая возвращает (в виде списка) сразу только символов, сколько вы задаете в параметре k.


Примечание:

Когда вам не нравится вывод в виде списка (в квадратных скобках), вы можете выводить элементы списка в цикле:

for symbol in random_symbols:
    print(symbol, end=" ")
→ Ссылка
Автор решения: Stanislav Volodarskiy

Аккуратный рефакторинг вашего приводит к такому результату:

import random

while True:
    choices = random.choices('!№#$%@^&*', k=10)
    print(*choices[:2], '', *choices[2:])
$ python choices.py | head
! !  % $ % $ $ @ $ №
@ №  % * & ! @ * & !
# %  ! & @ % # № @ !
% *  ! * @ # * @ @ #
! &  % ! # № @ # * !
@ ^  & % @ @ & * № %
^ @  № № ^ № № ^ @ &
! @  ! @ № $ # @ $ №
№ %  ! ^ $ * ^ & * @
! ^  ^ % ^ № ! ! ! ^
Traceback (most recent call last):
  File "/home/sv/desk/stackoverflow/temp.py", line 5, in <module>
    print(*choices[:2], '', *choices[2:])
BrokenPipeError: [Errno 32] Broken pipe
→ Ссылка