';随机';python模块内部循环

';随机';python模块内部循环,python,random,module,Python,Random,Module,我正在尝试创建一个python脚本,它接受一个字符串并在字符串的随机部分添加随机数。例如: str = 'PinguinsAreFun' output = 'Pi2ngu2in4sAre4F7un' 我试图寻找一个模块,做这件事,但我没有运气。所以我认为写我自己的代码来完成任务是个好主意。。。好这肯定不是个好主意 这就是我想到的: 随机导入 num='0123456789' str='这是一个字符串' 当k>15时: k=+1 rndm=随机选择(num) 结果=str[:int(rndm)]

我正在尝试创建一个python脚本,它接受一个字符串并在字符串的随机部分添加随机数。例如:

str = 'PinguinsAreFun'
output = 'Pi2ngu2in4sAre4F7un'
我试图寻找一个模块,做这件事,但我没有运气。所以我认为写我自己的代码来完成任务是个好主意。。。好这肯定不是个好主意

这就是我想到的:
随机导入
num='0123456789'
str='这是一个字符串'
当k>15时:
k=+1
rndm=随机选择(num)
结果=str[:int(rndm)]+rndm+str[int(rndm):]
打印(结果)

问题是它只工作一次。它的输出类似于:

This_i7s_A_String
由于我在
while
循环中违抗
rndm
,我猜在每个循环中它的值都会改变,但事实似乎并非如此。 分配给
rndm
的随机值不太可能恰好是相同的15倍:/


所以。。。有什么想法吗?

您正在使用原始字符串
str
生成每个循环的
结果。您应该使用循环以前的
结果
为每个循环生成新字符串。

代码中有许多错误:

  • k
    未初始化
  • k=+1
    应该是
    k+=1
  • 覆盖内置的
    str
  • 您不必重复使用
    结果
    (只需在原始字符串中插入一个数字)
这是一个选项,可以执行您想要的操作:

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)

尝试下面的代码,您需要获得字符串中的随机位置,然后在该随机位置添加随机数

使用以下代码可轻松实现:

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)
随机导入
num='0123456789'
mystr='这是一个字符串'
k=0
当k
输出:

4T3h1i0s_Is66_9A_6Stri02ng
03Thi57s8_410; u A8_8108标准48

进程已完成,退出代码为0

我的2美分(去掉了
num='0123456789'
):

输出:

4T3h1i0s_Is66_9A_6Stri02ng

k
是如何初始化的?您不应该覆盖
str
;然后你应该重复使用
结果
(而不是你原来的
str
…)。类似于
result='This_Is_A_String'。。。;result=result[:int(rndm)]+rndm+result[int(rndm):]
初始化的
k
在哪里?您已经编写了
k=+1
,它是
k+=1
作为旁白,不要使用
str
作为变量名,因为您正在隐藏Python内置的
str
rndm
的值完全按照您的预期运行。您在每个迭代步骤上都覆盖了前面的
result
值,但是…感谢您指出错误。但这主要是因为我感到沮丧:)我忘了在我的问题中写k=0,拼错了“+=”,只是在没有真正思考的情况下写了一个变量名。我的实际代码使用'usr_input=input('Enter Message:')。感谢您指出我一直在覆盖结果的事实,也感谢您提供的代码。