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

时间:2018-09-17 19:13:37

标签: python python-2.7

我有验证码

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点以上)

2 个答案:

答案 0 :(得分:1)

您可以使用random.sample选择一组随机的索引,在该索引上您将插入一个点而不是在每个索引处绘制。

如果不包括第一个索引和最后一个索引,则从这些索引中形成切片并与'.'.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))

答案 1 :(得分:0)

您可以使用以下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