Как заставить работать генератор случайных паролей в Python?

Я учусь на факультете программирования в колледже, и мне нужно создать генератор случайных чисел с помощью Python, но я никогда не смогу заставить его работать. Я либо получаю сообщение об ошибке, либо ничего не отображается. В настоящее время ошибка, которую я получаю с этой версией:

line 34, in <module> 
print(rand.randchoice(X) in range(Y))
return seq[self._randbelow(len(seq))]
Type Error: object of type'int' has no len()
import os
import sys
import random as rand   
import string as str

#FUNCTION FOR THE UI
print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')
X = int(len(input('Enter Your Choice Here: ')))
Y = int(len(input('Enter Number of Characters Here: ')))

easy = str.ascii_lowercase
medium = str.ascii_lowercase + str.ascii_uppercase + str.digits
hard = str.ascii_letters + str.ascii_uppercase + str.digits + str.punctuation

if X == '1':
    X = easy
elif X =='2':
    X = medium
elif X == '3':
    X = hard

print(rand.choice(X) in range(Y))

Я также попытался вручную ввести все символы в массивы. Я надеялся, что он получит случайные символы из каждого списка с длиной, соответствующей «Y».

Первая строка кода — строка 7, последняя строка — строка 34.

Покажите код и полную информацию об ошибке в виде правильно отформатированного текста (в формате кода) в вопросе.

Michael Butscher 23.03.2024 19:16

Не используйте одно и то же имя переменной (X) для двух разных вещей (числа, введенного пользователем, и выбранного списка символов).

mkrieger1 23.03.2024 19:40

Кстати говоря... X — это число, но вы сравниваете его со строками, поэтому оно никогда не будет равно.

mkrieger1 23.03.2024 19:42

И ещё... почему ты используешь len()? Не имеет значения, вводит ли пользователь 1 или 2 или a или b, X всегда будет 1. (Если, конечно, он не введет 10 или ab или xx и т. д., то тогда будет 2. И так далее.)

mkrieger1 23.03.2024 19:44

mkrieger1 Я просто проверял, сработает ли это, и увидел, что это возможное решение подобных проблем. Я просто забыл удалить это здесь.

epicasasin3426 23.03.2024 19:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
5
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибка возникает потому, что переменная y представляет собой целое число, представляющее длину входной строки, а не количество символов, которые пользователь хочет включить в свою случайную строку.

import random as rand
import string as string_module

print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')

x_choice = input('Enter Your Choice Here: ')
y_chars = int(input('Enter Number of Characters Here: '))

easy = string_module.ascii_lowercase
medium = string_module.ascii_lowercase + string_module.ascii_uppercase
hard = string_module.ascii_letters + string_module.digits + string_module.punctuation

if x_choice == '1':
    x = easy
elif x_choice == '2':
    x = medium
elif x_choice == '3':
    x = hard
else:
    print("Invalid choice!")

Теперь y_chars представляет количество символов, которые пользователь хочет включить в свою случайную строку, что должно устранить ошибку TypeError, с которой вы столкнулись.

Вместо этого можно использовать random.sample.

e-motta 23.03.2024 19:47

Я заметил несколько проблем. Во-первых, вы получаете длину пользовательского ввода, а не ввода. Строки 16 и 17 (согласно изображению) должны быть:

X = int(input('Enter Your Choice Here: '))
Y = int(input('Enter Number of Characters Here: '))

Кроме того, строки с 27 по 32 должны проверять наличие целого числа, а не строки:

if X == 1:
    X = easy
elif X == 2:
    X = medium
else:
    X = hard

Наконец, чтобы распечатать сгенерированный пароль, вместо этого вам следует использовать этот код:

for i in range(Y):
    print(rand.choice(X), end = "")

Конец = "" означает, что следующий символ пароля будет напечатан в той же строке консоли.

Это будет окончательный код:

import os as os
import sys as sys
import random as rand   
import string as str
#FUNCTION FOR THE UI
print('Please choose a difficulty level for your new password:')
print('1. Easy')
print('2. Medium')
print('3. Hard')
X = int(input('Enter Your Choice Here: '))
Y = int(input('Enter Number of Characters Here: '))

easy = str.ascii_lowercase

medium = str.ascii_lowercase + str.ascii_uppercase + str.digits

hard = str.ascii_letters + str.ascii_uppercase + str.digits + str.punctuation

if X == 1:
    X = easy
elif X == 2:
    X = medium
else:
    X = hard

for i in range(Y):
    print(rand.choice(X), end = "")

Другие вопросы по теме