Новая строка каждый раз при запуске цикла - PullRequest
0 голосов
/ 28 ноября 2018

Хочется доказать, что брат и сестра ошибочны в том, сколько времени может понадобиться компьютеру, чтобы угадать конкретную строку, используя Brute Force, даже с введенным правильным количеством символов. Я могу заставить код работать, но не могу понять, какзаставить его печатать новую строку при каждом запуске.Я уверен, что смотрю что-то простое.Ниже приведено несколько примеров кода, который я пробовал.

import string
import random

random=''.join([random.choice(string.ascii_letters+string.digits) for n in xrange(5)])

while True:
   if random != "Steve":
      print(random)
   if random == "Steve":
      print("Found")

Это будет постоянно печатать одну и ту же строку снова и снова.Я также пробовал это без оператора while только if, и это, похоже, не работает.

Я знаю достаточно, что как только random выберет эти 5 случайных символов, они не изменятся, пока что-то не изменится, но, как я сказал, я не уверен, как это сделать.Я пытался переместить random в разные места, но не работает, я просто получаю разные сообщения об ошибках.

Может кто-нибудь мне помочь.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

У вас есть две проблемы здесь.Как отметил @Primusa, ваше случайное поколение должно быть перемещено внутри цикла, иначе оно будет запущено только один раз.Однако другая проблема заключается в том, что вы импортируете random, а также устанавливаете переменную на random.Вот откуда ваш NameError.Вы определили random как строку, которая работает на первой итерации вашего цикла.Однако на второй итерации в random не будет объявлена ​​функция с именем choice, поскольку в этот момент она является строкой.Переименуйте переменную random или импортируйте пакет random под псевдонимом, например:

import random as rnd
0 голосов
/ 28 ноября 2018
random=''.join([random.choice(string.ascii_letters+string.digits) for n in xrange(5)])

Это не создает новую случайную строку каждый раз.В этот момент random - это просто случайно сгенерированная строка, которая не изменяется во время выполнения цикла whileСсылка на random не создает новую строку, а просто возвращает первую сгенерированную строку, поскольку random - это просто строка в вашей памяти, а не функция.

Перемещение создания случайной строки в функцию:

import string
from random import choice

def make_random():
    return ''.join([choice(string.ascii_letters+string.digits) for n in xrange(5)])

Затем запустите цикл:

while True:
    random = make_random()

    if random != "Steve":
        print(random)
    if random == "Steve":
        print("Found")

РЕДАКТИРОВАТЬ:

Переключено import random на from random import choice, потому что random (переменная) перезаписывает random (библиотека)и выдает ошибку атрибута при попытке вызвать random.choice.

...