Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.08.2023
Сообщений: 36

Задача на генерацию пароля

17.08.2023, 15:00. Показов 1107. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень часто пароль, сгенерированный из случайных символов сложно запомнить. Некоторые системы создания паролей рекомендуют сцеплять вместе два слова на английском языке, это улучшает запоминание пароля, хотя и уменьшает его надежность.
Напишите функцию concate_password, которая будет открывать файл password.txt со списком слов (все слова в одной строке через пробел), случайным образом выбирать два из них и сцеплять вместе для получения итогового пароля. Функция должна вернуть получившийся пароль.
При создании пароля исходите из следующих требований:
- в пароле должно быть от 7 до 10 символов,
- каждое из используемых слов должно быть длиной хотя бы в три буквы,
- сделайте первые буквы обоих слов заглавными, а остальные - строчными, чтобы легко можно было понять, где заканчивается одно и начинается другое.
Подсказка. При решении этой задачи, возможно, понадобится функция random.shuffle из модуля random, которая перемешивает список с паролями случайным образом.
Пример:
Если были из файла были случайно выбраны слова ‘bird‘ и ‘cat‘ (без кавычек), то пароль должен быть ‘BirdCat‘ (тоже без кавычек).

Примечания
Функция должна обязательно называться concate_password.
Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2023, 15:00
Ответы с готовыми решениями:

Задача на генерацию четных и нечетные чисел с пом0щью рандома
У меня появилась проблема, все никак не могу решить задачу на генерацию четных и нечетных чисел с пом0щью random через классы. Помогите...

Написать программу генерацию пароля к этой форме
Используя классы и функций

Добавить генерацию пароля при создании нового пользователя в админке
в админке wordpress имеется создание нового пользователя, как сделать чтоб была генерация пароля при создании пользователя? (я просто...

15
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.08.2023, 16:29
Python
1
2
3
4
5
6
7
from random import sample
def concate_password():
    word_arr = open('password.txt').read()
    while True:
        a, b = sample(word_arr, 2)
        if 7 <= len(a) + len(b) <= 10 and min(len(a), len(b)) >= 3:
            return a.title() + b.title()
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.08.2023, 16:51
Цитата Сообщение от idealist Посмотреть сообщение
word_arr = open('password.txt').read()
сплит же!
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.08.2023, 16:59
Цитата Сообщение от iSmokeJC Посмотреть сообщение
сплит же!
Спасибо! Вот что значит не тестировать программы!
Исправленный и оттестированный вариант:
Python
1
2
3
4
5
6
7
from random import sample
def concate_password():
    word_arr = open('password.txt').read().split()
    while True:
        a, b = sample(word_arr, 2)
        if 7 <= len(a) + len(b) <= 10 and min(len(a), len(b)) >= 3:
            return a.title() + b.title()
1
Чугунные скороходы
 Аватар для ARRAYBOW
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
17.08.2023, 19:36
Python
1
2
3
4
5
6
from random import choises
def concate_password():
    while(True):
        a,b=choises(open('password.txt', 'r').read().split(' '), k=2)
        if (len(a)+len(b) >= 7 and len(a)+len(b) <= 10) and not (len(a) >= 3 or len(b) >= 3):
            return a.capitalize() + b.capitalize()
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.08.2023, 21:16
ARRAYBOW, у вас в каждой итерации цикла файл будет целиком считываться. И в пятой строке ошибка.

Добавлено через 28 минут
Ну и функция choises выбирает с повторениями, т.е. может выбрать дважды одно и то же слово. Между тем в условии написано
Цитата Сообщение от agrianbezhova Посмотреть сообщение
случайным образом выбирать два из них
и упоминается функция
Цитата Сообщение от agrianbezhova Посмотреть сообщение
random.shuffle
с помощью которой тоже дважды одно и то же слово не выберешь. Так что в задании повторения вроде бы не предусматриваются...
1
11 / 10 / 1
Регистрация: 29.07.2023
Сообщений: 81
17.08.2023, 23:44
Трактовка условия не однозначна, в файле строчные или прописные и дубли, кроме обработки ошибок, потенциальных дубликатов и повторного чтения файла для рекомендованного random.shuffle, можно вообще два любых слова объединить и обрезать случайно длинной от 7 до 10 символов. А если выпало 'dog' + 'cat', считается ли добавление любого из них как ещё одно слово?

Python
1
2
3
4
5
6
7
8
9
10
11
from random import shuffle
 
def concate_password():
    x = [i for i in open('password.txt',"r").read().split() if 2 < len(i) <11]
    shuffle(x)
    first=x[1].title()
    if len(first)<7:
        y=[i for i in x if len(i) < 11-len(first)]
        shuffle(y)
        first+=y[1].title()
    return first
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
18.08.2023, 04:42
Цитата Сообщение от Риддик Посмотреть сообщение
повторного чтения файла для рекомендованного random.shuffle
Не, в условии скорее всего что-то такое имелось в виду:
Python
1
2
3
4
5
6
7
8
from random import shuffle
def concate_password():
    word_arr = open('password.txt').read().split()
    while True:
        shuffle(word_arr)
        a,b = word_arr[:2]
        if 7 <= len(a) + len(b) <= 10 and min(len(a), len(b)) >= 3:
            return a.title() + b.title()
1
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.08.2023, 10:11
в условии прямо имелось в виду:
Цитата Сообщение от agrianbezhova Посмотреть сообщение
В решении не должно быть вызовов требуемых функций.
при том, что:
Цитата Сообщение от agrianbezhova Посмотреть сообщение
Ваше решение должно содержать только функции.
- это что-то с чем-то...
такие задачи надо в музей... на вечную память!
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
18.08.2023, 12:45
Подскажите пожалуйста как сделать, чтобы он выбирал любое количество слово или цифр и сцеплял их вместе в случайном порядке. Заранее огромное спасибо.
0
11 / 10 / 1
Регистрация: 29.07.2023
Сообщений: 81
18.08.2023, 12:54
YuS_2, насколько я понял, требуется написать функцию и сдать на проверку без вызова оной.

idealist, смотря что они уже должны знать, и если shuffle чисто ради практики, в данном случае sample или choice кажется предпочтительнее.
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.08.2023, 13:32
Цитата Сообщение от Риддик Посмотреть сообщение
насколько я понял, требуется написать функцию и сдать на проверку без вызова оной.
по смыслу - возможно, по орфографии (окончания выделил специально) - нонсенс.
т.е. функции которые потребуются - вызывать нельзя. Но решение должно содержать исключительно функции же... тупик, однако. Ни внешних, ни созданных функций, по условию, использовать не получится, ибо, ибо...
0
11 / 10 / 1
Регистрация: 29.07.2023
Сообщений: 81
18.08.2023, 15:18
isaak,
Кликните здесь для просмотра всего текста
это уже другая задача, но можно что-то вроде
Python
1
2
3
4
5
6
7
8
from random import sample
 
def concate_password(n=1):
    x = open('password.txt').read().split()
    words = sample(x, n)
    return ''.join(words)
 
for i in range(1,10):print(concate_password(i))
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
18.08.2023, 16:50
Нашел более сложный для моего понимания вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import optparse
import os
import random
import sys
 
DEFAULT_CHARS = "234679ADEFGHJKLMNPRTUWabdefghijkmnpqrstuwy"
DEFAULT_LEN = 18
 
def choices(options, length, choice=random.choice):
  return (choice(options) for _ in range(length))
 
def choices_non_repeated(options, length, choice=random.choice):
  assert len(options) > 1
  last = choice(options)
  count = 0
  while count < length:
    yield last
    count += 1
 
    while True:
      value = choice(options)
      if value != last:
        last = value
        break
 
def main(args):
  op = optparse.OptionParser(add_help_option=False)
  op.add_option("--help", action="help",
    help="show help message and exit")
  op.add_option("-b", "--bare", action="store_true", default=False,
    help="print passwords without trailing newline")
  op.add_option("-c", "--chars", metavar="SET", nargs=1, default=DEFAULT_CHARS,
    help="character set to use (default: %default)")
  op.add_option("--repeat", action="store_true", default=False,
    help="allow repetition")
  op.add_option("-l", "--len", dest="max", nargs=1, type="int", default=DEFAULT_LEN,
    help="max length (default: %default)")
  op.add_option("--min", nargs=1, type="int", default=None,
    help="min length (defaults to max)")
  op.add_option("-n", "--count", nargs=1, type="int", default=None,
    help="number of passwords to generate (default: %default)")
  op.add_option("--cols", type="int", default=None,
    help="number of columns to use")
  opts, args = op.parse_args(args)
  if args:
    op.error("unknown arguments")
 
  if os.isatty(sys.stdin.fileno()) and (
    opts.count is None and opts.cols is None
    and not opts.bare
  ):
    opts.cols = 80 // (opts.max + 1)
    opts.count = opts.cols * 25
  else:
    if opts.count is None:
      opts.count = 1
    if opts.cols is None:
      opts.cols = 1
 
  if opts.bare and opts.cols != 1:
    op.error("bare output requires --cols=1")
 
  if opts.min == None:
    opts.min = opts.max
 
  if any(x < 1 for x in [opts.cols, opts.count, opts.min, opts.max]):
    op.error("values must be >= 1")
 
  choices_func = choices_non_repeated
  if opts.repeat:
    choices_func = choices
  elif len(set(opts.chars)) < 2:
    op.error("must allow repetition or provide a longer character set")
    return "op.error shouldn't return"
 
  col = 0
  for _ in range(opts.count):
    length = random.randint(opts.min, opts.max)
    password = "".join(choices_func(opts.chars, length))
    sys.stdout.write(password)
    if not opts.bare:
      col += 1
      if col == opts.cols:
        sys.stdout.write("\n")
        col = 0
      else:
        sys.stdout.write(" ")
 
 
if __name__ == "__main__":
  sys.exit(main(sys.argv[1:]))
Добавлено через 8 минут
Вот еще ода, но только без знаков препинания:
Python
1
2
3
4
5
6
7
8
9
10
import random
import string
 
def gen_random_string(char_set, length):
    if not hasattr(gen_random_string, "rng"):
        gen_random_string.rng = random.SystemRandom() # Create a static variable
    return ''.join([ gen_random_string.rng.choice(char_set) for _ in range(length) ])
 
password_charset = string.ascii_letters + string.digits
print(gen_random_string(password_charset, 32))
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
19.08.2023, 00:04
Вот еще один вариант:
Python
1
import random;print(''.join([random.choice(random.choice([['a','e','f','g','h','m','n','t','y'],['A','B','E','F','G','H','J','K','L','M','N','Q','R','T','X','Y'],['2','3','4','5','6','7','8','9'],['/','*','+','~','@','#','%','^','&','//']])) for i in range(16)]));
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2023, 13:51
isaak, информация к размышлению
Python
1
2
3
print(random.choice(['a', 'e', 'f', 'g', 'h', 'm', 'n', 't', 'y']))
# equals
print(random.choice('aefghmnty'))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2023, 13:51
Помогаю со студенческими работами здесь

Задача на генерацию паролей
Нужно создать программу в которой будет n - количество символов пароля хотя бы a -...

Задача на генерацию кругов
Программа генерируется круги разных цветов, с шагом в 1 пиксел, с толщиной линии 1 пиксель из центра формы (1000x1000 пикселов), в каждом...

Задача про генерацию последовательностей 0 и 1
Нужно написать программу генерации m-последовательностей 0 и 1, удовлетворяющих обоим требованиям: число 1 должно быть чётным(включая 0...

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

Задача на криптостойкость пароля
Даны два пароля: 1 - 83912062004 2 - !!!!!!!!! Какой из них более криптостойкий и во сколько раз? Ответ поясните. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru