我有验证码
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点以上)
答案 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