В Python можно ли выполнять циклы while в случайном порядке? - PullRequest
0 голосов
/ 25 марта 2020

Я создал генератор паролей, который создает случайный набор цифр, букв и символов, но результаты всегда печатаются в таком порядке. Каждый тип символов создается через свое собственное время l oop, и мне интересно, есть ли способ для циклов while выполнять произвольно, а не в порядке сверху вниз. Спасибо!

import random

alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphabet_up = alphabet.upper()
numz = '0123456789'
symz = '~@!#$%&*'
alpha_character_type = [alphabet, alphabet_up]
index_counter_num = 0
index_counter_letter = 0
index_counter_symz = 0
print('Welcome to password generator')
pw_length = int(input('Please enter password length: '))
if pw_length < 6:
    pw_length = int(input('Password must be at least 6 characters long. Please enter a larger number: '))
letters_num = int(input('Enter desired number of letters: '))
numbers_num = int(input('Enter desired number of numbers: '))
if letters_num + numbers_num>= pw_length:
    print('Please leave room for symbols. Reduce the amount of letters and/or numbers')
    letters_num = int(input('Enter new desired number of letters: '))
    numbers_num = int(input('Enter new desired number of numbers: '))
    characters_left = pw_length - letters_num - numbers_num
    print('Thank you. There is now', characters_left, 'spaces left for symbols. Your password will now be generated' )
print('Here is your password: ')
#NUMBERS LOOP
while index_counter_num < numbers_num:
    selected_numz = random.choice(numz)
    index_counter_num += 1
    print(selected_numz, end= '')
#LETTERS LOOP
while index_counter_letter < letters_num:
    style = random.choice(alpha_character_type)
    style_character = random.choice(style)
    selected_letters = style_character
    index_counter_letter += 1
    print(selected_letters, end= '')
# SYMBOLS LOOP
characters_left = pw_length - letters_num - numbers_num
while index_counter_symz < characters_left:
    selected_symz = random.choice(symz)
    index_counter_symz += 1
    print(selected_symz, end = '')

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Вы можете выполнять блоки кода в произвольном порядке, если вы помещаете их в функции. Функции можно поместить в список и выполнить в случайном порядке с помощью random.choices (если вы не хотите, чтобы один и тот же l oop повторялся дважды, вместо этого используйте random.shuffle)

import random

def func1():
    print("This is func1")
    while False: # your first while loop here
        pass

def func2():
    print("This is func2")
    while False: # your second while loop here
        pass

funcs = [func1, func2]

random.seed()

for f in random.choices(funcs, k=len(funcs)):
    f()
0 голосов
/ 25 марта 2020

Перемешать

  1. Создать список элементов, которые вы хотите перебрать.
  2. Перемешать этот список, используя (например) функцию random.shuffle().
  3. Итерация по этому списку.

Это приведет к случайному порядку без повторения. Если вы хотите выбрать случайные элементы с возможностью повторения, то вам нужно выбрать случайную выборку из этого пула.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...