Ошибка печати цикла генератора паролей Python

Я пытаюсь создать генератор паролей с помощью python. В настоящее время я просто хочу, чтобы программа печатала случайные символы из таблицы ascii. Позже я представлю числа и символы. Я использовал цикл for для печати случайного символа из диапазона, который вводит пользователь. Однако это работает, когда я использую end='' для печати символов в той же строке, где появляется %. Я думаю, что это нужно для того, чтобы показать, что он не напечатал символ. Я бы хотел, чтобы программа не печатала %, потому что позже я добавлю другие цифры и символы.

Я попытался вычесть 1 из диапазона чисел. В результате получилась та же строка с %, но на 1 меньше, чем предполагалось. Я также попытался создать цикл while, который будет печатать, пока переменная меньше числа пароля. Он также напечатал %.

Вот код:

import random
import string
letters=string.ascii_letters
passwordnumber=int(input("How many characters do you want your password to be? "))
for i in range(passwordnumber):
    print(random.choice(letters), end='')

Странно.. У меня не показывает % см. - onlinegdb.com/9EagkKVW1

Bhargav - Retarded Skills 22.11.2022 08:06

Ваш код отлично работает для меня. Нет %. Не знаю, откуда это может взяться. Нет % в остальное время? Как вы запускаете свой скрипт? Из оболочки Linux?

0x0fba 22.11.2022 08:06

Быть уверенным. Создайте строку, содержащую сгенерированный пароль, и напечатайте последний символ. Первый: password = "".join([random.choice(letters) for _ in range(passwordnumber)]). Тогда: print(password[-1])

0x0fba 22.11.2022 08:10

Мне помог Veekxt. Это был мой терминал. Я использую vscode, и это было напоминание. Извините, я не знаю, как ответить. Спасибо за помощь.

moomoo 22.11.2022 08:16
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
64
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Печать % вашей оболочкой (может быть zsh), это означает, что строка не заканчивается на "\n". Это просто напоминание из оболочки. С тобой все в порядке. Вы можете просто добавить print() в конце своего кода, чтобы напечатать "\n", и % больше не будет отображаться.

Попробуй это

characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")
def generate_random_password():
  ## length of password from the user
  length = 8

  ## shuffling the characters
  random.shuffle(characters)

  ## picking random characters from the list
  password = []
  for i in range(length):
    password.append(random.choice(characters))

  ## shuffling the resultant password
  random.shuffle(password)

  ## converting the list to string
  ## printing the list
  return "".join(password)

Ваш скрипт работает абсолютно нормально на моей стороне. смотри это https://onlinegdb.com/9EagkKVW1

Если вы чувствуете, что это проблема с end, вы можете просто объединить выходные данные в строку и сразу распечатать.

import random
import string
letters=string.ascii_letters
pas =''
passwordnumber=int(input("How many characters do you want your password to be? "))
for i in range(passwordnumber):
    pas += random.choice(letters)
   
print(pas)

выходы #

How many characters do you want your password to be? 5
AvfYm

мы можем использовать случайный метод .sample(). он требует 2 аргумента:

- iterable of elements to use

- number of elements to take

результат не содержит дубликатов.

import random
import string
letters=string.ascii_letters
passwordnumber=int(input("How many characters do you want your password to be? "))
pas = ''.join(random.sample(letters, k=passwordnumber))
print(pas)

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