如何在字符串中放置随机点?

How to place random dots in string?

我有密码

import random 
lst = ['.'] 
string = 'o3oyrwrj0jtirvwp5sh57oed67d5zy' 
print ''.join('%s%s' % (x, random.choice(lst) if random.random() > 0.5 else '') for x in string)

它生成符号之间带有随机点的字符串:

o3.oy.r.wrj.0jt.i.rv.w.p5sh57.oe.d6.7.d.5z.y

o3oyr.wr.j.0.j.ti.rvw.p5sh5.7o.e.d6.7.d5zy

o.3o.y.rw.r.j.0.jt.i.r.v.wp.5sh.5.7.oe.d6.7.d5.zy

我需要生成点数从 1 到 10 的字符串,除了结果

点在最后'o.3.oyrwrj.0.jt.irv.wp.5.s.h57oe.d.67.d.5.zy.'

开头的点'o.3.oyrwrj.0.jt.irv.wp.5.s.h57oe.d.67.d.5.zy'

双+点'o..3.oyrwrj.0.jt.irv.wp.5.s.h57oe.d.67.d.5.zy'

我只需要 1 到 10 个点(不是 10+)

您可以使用这个 if 语句:

if string.startswith('.')
    # Raise dot at the beginning exception
elif string.endswith('.'):
    # Raise dot at the end exception
elif '..' in string:
    # Raise double dot exception

您可以使用 random.sample 到 select 一组随机索引,您将在其中插入一个点而不是在每个索引处绘制。

如果您排除第一个和最后一个索引,则从这些索引中形成切片并与 '.'.join 连接将防止点对以及标题和尾随点。

from random import sample

def insert_dots(s, k):
    indices = sorted(sample(range(1, len(s) - 1), k))

    intervals = []

    for i, j in zip([0] + indices, indices + [len(s)]):
        intervals.append(s[i:j])

    return '.'.join(intervals)

例子

s = 'foobar'

for _ in range(5):
    print (insert_dots(s, 3))

输出

fo.o.ba.r
fo.ob.a.r
f.oob.a.r
fo.o.b.ar
fo.o.ba.r

如果你需要随机点数,你可以这样做。

insert_dots(s, randint(1, 10))