如何在现有字符串中生成随机字符?

时间:2019-07-02 18:38:43

标签: python random

我正在做一个文本转换器,我想在已经存在的字符串中选择随机字符。

当我研究它时,出现的只是想在字母表中生成随机字母的人,或者想生成随机字符串的人。那不是我想要的。

new_string = ""
index = 0

for letter in input_text:
    if letter not in "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM":
        new_string = new_string + (letter)
        continue
    index += 1
    if index % 2 == 0:
        new_string = new_string + (letter.upper())
    else:
        new_string = new_string + (letter.lower())

我现有的文本转换器将其他所有字母都大写,但是我希望它随机将这些字母大写。这可能吗?

1 个答案:

答案 0 :(得分:1)

您可能希望查看random库(内置)中的random.choice and random.choices函数,该函数使您可以从列表中随机选择一个项目:

>>> import random
>>> a = random.choice("ABCDabcd")
'C'
>>> my_text = "".join(random.choices("ABCDabcd", k=10))
'baDdbAdDDb'

为了随机大写,您可以从字母的小写和大写版本列表中choice

import random

new_string = ""
for letter in input_text:
    if letter not in "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM":
        new_string = new_string + (letter)
    else:
        new_string += random.choice([letter.upper(), letter.lower()])

(请注意,random.choices返回一个list,而不是str,因此我们需要将join()个元素放在一起。)


最后,您可能还想使用isalpha函数:

>>> "A".isalpha()
True
>>> "a".isalpha()
True
>>> "7".isalpha()
False

Relevant question


但是upper()lower()函数对非字母字符无效。因此,您可以从代码中完全删除此检查:

new_string = ""
for letter in input_text:
    new_string += random.choice([letter.upper(), letter.lower()])