Как лучше сделать, чтобы после паролей не выводился None?

Если без костылей, то код таков, но в конце выводится None(в return я записал '?' потому что не знаю что туда написать чтобы None не было).

from random import sample
from string import ascii_letters, digits
# программа для генерации паролей определённой длинны определённое количество раз
def generate_password(length): # генерация паролей длины m
    symbols = list((set(ascii_letters) | set(digits)) - set('lI1oO0'))
    password = sample(symbols, length)
    return ''.join(password)

def generate_passwords(count, length): # вывод n паролей длины m
    for password in range(count):
        print(generate_password(length))
    return ?

n, m = int(input()), int(input())
print(generate_passwords(n, m))

Либо же можно немного переделать вторую функцию, мне кажется это делает код менее читаемым, можно ли как-то реализовать то же самое, но без подобных изменений?

def generate_passwords(count, length):
    for password in range(count - 1):
        print(generate_password(length))
    return generate_password(length)

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

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

Убери print в конце

....
n, m = int(input()), int(input())
generate_passwords(n, m)
→ Ссылка
Автор решения: Эникейщик

Функция generate_passwords() выводит на экран пароли (что означает, что у нее название, не соответствующее смыслу).

Вызов функции generate_passwords() в инструкции print(generate_passwords()) выводит на экран результат выполнения функции generate_passwords(). Результат выполнения - это то, что функция возвращает. В питоне, если в функции отсутствует return, то она по умолчанию возвращает None. Именно этот None и печатается в строчке print(generate_passwords(n, m)).

В return ... можно было бы написать что угодно, но это не решило бы проблемы, потому что тогда выводилось бы не None, а то, что там написано.

→ Ссылка