将字符串中的随机字符转换为大写

5 投票
4 回答
5037 浏览
提问于 2025-04-17 05:41

我想随机添加一些文本字符串,这样输出的结果就不仅仅是像下面这样的

>>>david

而是会变成像这样的

>>>DaViD
>>>dAviD

我现在的代码是这个

import random
import string

print "Name Year"
text_file = open("names.txt", "r")
for line in text_file:
    print line.strip()+"".join([random.choice(string.digits) for x in range(1, random.randint(1,9))])

它输出的是这个

>>>JOHN01361

我希望那个字符串能变成像这样的

>>>jOhN01361
>>>john01361
>>>JOHN01361
>>>JoHn01361

4 个回答

0

下面这个方法可能比Nook的方案稍微高效一些,而且它不需要一开始就把文本转换成小写字母:

import random
txt = 'JOHN01361'
''.join(random.choice((x,y)) for x,y in zip(txt.upper(),txt.lower()))
1

你可能想要做的事情是:

import random

lol = "lol apples"

def randomupper(c):
    if random.random() > 0.5:
        return c.upper()
    return c.lower()

lol =''.join(map(randomupper, lol))

编辑:

正如Shawn Chin在评论中提到的,这个可以简化为:

lol = "".join((c.upper(), c)[random() > 0.5] for c in lol)

这个方法很酷,但比使用map要慢。


编辑 2:

经过一些计时测试,似乎
"".join( random.choice([k.upper(), k ]) for k in s )
比使用map方法慢了超过5倍,有人能确认这一点吗?
时间是:

no map:        5.922078471303955
map:           4.248832001003303
random.choice: 25.282491881882898
7

好吧,你的要求其实是随机把字母变成大写。如果你想的话,可以用下面这个列表推导式来实现:

import random

s = "..."
s = "".join( random.choice([k.upper(), k ]) for k in s )

不过可能还有更好的方法……

撰写回答