'Случайный' модуль питона внутри циклов - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать скрипт Python , который принимает строку и добавляет случайные числа в случайные части строки. Например:

str = 'PinguinsAreFun'
output = 'Pi2ngu2in4sAre4F7un'

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

Это то, что я пришелс:

import random

num = '0123456789'

str = 'This_Is_A_String'

while k > 15:

    k =+ 1

    rndm = random.choice(num)

    result = str[:int(rndm)] + rndm + str[int(rndm):]

print(result)

Проблема в том, что работает только 1 раз . Он выводит что-то вроде:

This_i7s_A_String

Поскольку я игнорирую rndm внутри цикла while, я думаю, что в каждом цикле его значение будет меняться, но это не такпохоже дело в этом. Маловероятно, что случайное значение, присвоенное rndm, случайно оказалось одинаковым 15 раз: /

Итак ... Есть идеи о том, что происходит?

Ответы [ 4 ]

0 голосов
/ 28 октября 2019

Мои 2 цента (избавился от num = '0123456789'):

import random

def rs(string):
    r = string
    for i in range(10):
        index = random.randint(0, len(string))
        r = r[:index] + str(random.randint(0, 9)) + r[index:]
    return r

print(rs('This_Is_A_String'))

Вывод:

4T3h1i0s_Is66_9A_6Stri02ng
0 голосов
/ 28 октября 2019

в вашем коде много неправильного:

  • k не инициализировано
  • k =+ 1 должно быть k += 1
  • вы перезаписываетеstr
  • вы не используете повторно result (вы просто вставляете одно число в исходную строку)

это вариант, чтобы сделать то, что выхочу:

from random import randrange

strg = 'This_Is_A_String'
for _k in range(15):
    rndm = randrange(len(strg))
    strg = f'{strg[:rndm]}{rndm}{strg[rndm:]}'

print(strg)
0 голосов
/ 28 октября 2019

Попробуйте код ниже, вам нужно получить случайные позиции в вашей строке, а затем добавить случайное число в этой случайной позиции вашей строки.

Легко достижимо с помощью кода ниже:

import random

num = '0123456789'

mystr = 'This_Is_A_String'
k = 0
while k < len(mystr):
    rndm = random.choice(num)
    randompositioninstring = random.randint(0, len(mystr))
    k += 3
    mystr = mystr[:randompositioninstring] + str(rndm) + mystr[randompositioninstring:]

print(mystr)

Вывод:

03Thi57s8_410Is_A8_8108Str6ing48

Процесс завершен с кодом выхода 0

0 голосов
/ 28 октября 2019

Вы используете исходную строку str для создания result каждого цикла. Вы должны использовать предыдущий result цикла для создания новой строки в каждом цикле.

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