Zapisałbym funkcję generuj_haslo np. tak
import random
import string
PASSWORD_CHARACTERS = string.ascii_letters + string.digits + string.punctuation
def generuj_haslo(size=8, chars=PASSWORD_CHARACTERS) -> str:
return ''.join(random.choice(chars) for _ in range(size))
no i bez spacji w zwracanym haśle ''.join
kolejna rzecz wprowadzająca nieco w błąd (i nie zawsze oczywista dla użytkowników programu),
print('Jeżeli chcesz nowe hasło wpisz Y.')
dajesz do zrozumienia, że chodzi o dużą literę Y a w kodzie sprawdzasz dla małej y spróbuj np.
if name in ['y', 'Y']:
break
no i wybór jest jeden tylko na tak (Y) a gdzie możliwość wybrania nie (N)
Linia 39 piszesz: "... naciśnięciu klawisza ENTER"
print("Program zamyka się po dwukrotnym naciśnięciu klawisza ENTER")
print('Jeżeli chcesz nowe hasło wpisz Y.')
a kod zaraz poniżej
while True:
name = input()
if name == 'y':
break
haslo = int(input('Jaka ma byc dlugosc hasla? '))
print(generuj_haslo(haslo))
nie "obsługuje" takiego założenia.
No i w miarę możliwość staraj się unikać DRY, sprawdź
[ on-line ]
while True:
try:
size = int(input("Jaka ma być długość hasła? "))
print("\n", generate_password(size), "\n", sep="")
user_choice = input(" + Wpisz 'N' - aby zakończyć program\n" \
" + Naciśnij sam Enter - nowe hasło\n>> ")
if user_choice in ['n', 'N']:
break
except ValueError:
print("Nieprawidłowa wartość. Podaj liczbę całkowitą.")