简体   繁体   English

在Python中生成随机字母

[英]Generate a random letter in Python

Is there a way to generate random letters in Python (like random.randint but for letters)?有没有办法在 Python 中生成随机字母(如 random.randint 但用于字母)? The range functionality of random.randint would be nice but having a generator that just outputs a random letter would be better than nothing. random.randint 的范围功能会很好,但是有一个只输出随机字母的生成器总比没有好。

Simple:简单的:

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> import random
>>> random.choice(string.ascii_letters)
'j'

string.ascii_letters returns a string containing the lower case and upper case letters according to the current locale. string.ascii_letters根据当前语言环境返回包含小写和大写字母的字符串。

random.choice returns a single, random element from a sequence. random.choice从序列中返回单个随机元素。

>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'
>>>def random_char(y):
       return ''.join(random.choice(string.ascii_letters) for x in range(y))

>>>print (random_char(5))
>>>fxkea

to generate y number of random characters生成 y 个随机字符

>>> import random
>>> import string    
>>> random.choice(string.ascii_lowercase)
'b'

Another way, for completeness:另一种方式,为了完整性:

>>> chr(random.randrange(97, 97 + 26))

Use the fact that ascii 'a' is 97, and there are 26 letters in the alphabet.使用ascii 'a' 是 97 的事实,并且字母表中有 26 个字母。

When determining the upper and lower bound of the random.randrange() function call, remember that random.randrange() is exclusive on its upper bound, meaning it will only ever generate an integer up to 1 unit less that the provided value.在确定random.randrange()函数调用的上限和下限时,请记住random.randrange()在其上限上是独占的,这意味着它只会生成一个最多比提供的值少 1 个单位的整数。

You can use this to get one or more random letter(s)您可以使用它来获取一个或多个随机字母

import random
import string
random.seed(10)
letters = string.ascii_lowercase
rand_letters = random.choices(letters,k=5) # where k is the number of required rand_letters

print(rand_letters)

['o', 'l', 'p', 'f', 'v']

You can just make a list:你可以列一个清单:

import random
list1=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
b=random.randint(0,7)
print(list1[b])
def randchar(a, b):
    return chr(random.randint(ord(a), ord(b)))
import random
def guess_letter():
    return random.choice('abcdefghijklmnopqrstuvwxyz')
import random
def Random_Alpha():
    l = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    return l[random.randint(0,25)]

print(Random_Alpha())

您可以使用

map(lambda a : chr(a),  np.random.randint(low=65, high=90, size=4))
import string
import random

KEY_LEN = 20

def base_str():
    return (string.letters+string.digits)   
def key_gen():
    keylist = [random.choice(base_str()) for i in range(KEY_LEN)]
    return ("".join(keylist))

You can get random strings like this:你可以得到这样的随机字符串:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l
def create_key(key_len):
    key = ''
    valid_characters_list = string.letters + string.digits
    for i in range(key_len):
        character = choice(valid_characters_list)
        key = key + character
    return key

def create_key_list(key_num):
    keys = []
    for i in range(key_num):
        key = create_key(key_len)
        if key not in keys:
            keys.append(key)
    return keys

All previous answers are correct, if you are looking for random characters of various types (ie alphanumeric and special characters) then here is an script that I created to demonstrate various types of creating random functions, it has three functions one for numbers, alpha- characters and special characters.以前的所有答案都是正确的,如果您正在寻找各种类型的随机字符(即字母数字和特殊字符),那么这里是我创建的一个脚本,用于演示创建各种类型的随机函数,它具有三个函数,一个用于数字,alpha-字符和特殊字符。 The script simply generates passwords and is just an example to demonstrate various ways of generating random characters.该脚本只是生成密码,只是一个示例,用于演示生成随机字符的各种方法。

import string
import random
import sys

#make sure it's 3.7 or above
print(sys.version)

def create_str(str_length):
    return random.sample(string.ascii_letters, str_length)

def create_num(num_length):
    digits = []
    for i in range(num_length):
        digits.append(str(random.randint(1, 100)))

    return digits

def create_special_chars(special_length):
    stringSpecial = []
    for i in range(special_length):
        stringSpecial.append(random.choice('!$%&()*+,-.:;<=>?@[]^_`{|}~'))

    return stringSpecial

print("how many characters would you like to use ? (DO NOT USE LESS THAN 8)")
str_cnt = input()
print("how many digits would you like to use ? (DO NOT USE LESS THAN 2)")
num_cnt = input()
print("how many special characters would you like to use ? (DO NOT USE LESS THAN 1)")
s_chars_cnt = input()
password_values = create_str(int(str_cnt)) +create_num(int(num_cnt)) + create_special_chars(int(s_chars_cnt))

#shuffle/mix the values
random.shuffle(password_values)

print("generated password is: ")
print(''.join(password_values))

Result:结果:

在此处输入图片说明

A summary and improvement of some of the answers.一些答案的总结和改进。

import numpy as np
n = 5
[chr(i) for i in np.random.randint(ord('a'), ord('z') + 1, n)]
# ['b', 'f', 'r', 'w', 't']
#*A handy python password generator*

here is the output这是输出

 import random
    letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
        
    print("Welcome to the Python Password Generator!")
    l= int(input("How many letters would you like in your password?\n")) 
    s = int(input(f"How many symbols would you like?\n"))
    n = int(input(f"How many numbers would you like?\n"))
        
    sequence = random.sample(letters,l)
    num      = random.sample(numbers,n)
    sym      = random.sample(symbols,s)
    sequence.extend(num)
    sequence.extend(sym)
         
    random.shuffle(sequence)
    password = ''.join([str(elem) for elem in sequence])#listToStr 
    print(password)

这不使用任何花哨的模块,但工作正常:

    ''.join(chr(random.randrange(65,90)) for i in range(10))

And another, if you pefer numpy over random :还有一个,如果你喜欢numpy而不是random

import numpy as np
import string
np.random.choice(list(string.ascii_letters))

well, this is my answer!好吧,这就是我的答案! It works well.它运作良好。 Just put the number of random letters you want in 'number'... (Python 3)只需将您想要的随机字母数放在“数字”中......(Python 3)

import random

def key_gen():
    keylist = random.choice('abcdefghijklmnopqrstuvwxyz')
    return keylist

number = 0
list_item = ''
while number < 20:
    number = number + 1
    list_item = list_item + key_gen()

print(list_item)
import string
import random

def random_char(y):
    return ''.join(random.choice(string.ascii_letters+string.digits+li) for x in range(y))
no=int(input("Enter the number of character for your password=  "))
li = random.choice('!@#$%^*&( )_+}{')
print(random_char(no)+li)

My overly complicated piece of code:我过于复杂的一段代码:

import random

letter = (random.randint(1,26))
if letter == 1:
   print ('a')
elif letter == 2:
    print ('b')
elif letter == 3:
    print ('c')
elif letter == 4:
    print ('d')
elif letter == 5:
    print ('e')
elif letter == 6:
    print ('f')
elif letter == 7:
    print ('g')
elif letter == 8:
    print ('h')
elif letter == 9:
    print ('i')
elif letter == 10:
    print ('j')
elif letter == 11:
    print ('k')
elif letter == 12:
    print ('l')
elif letter == 13:
    print ('m')
elif letter == 14:
    print ('n')
elif letter == 15:
    print ('o')
elif letter == 16:
    print ('p')
elif letter == 17:
    print ('q')
elif letter == 18:
    print ('r')
elif letter == 19:
    print ('s')
elif letter == 20:
    print ('t')
elif letter == 21:
    print ('u')
elif letter == 22:
    print ('v')
elif letter == 23:
    print ('w')
elif letter == 24:
    print ('x')
elif letter == 25:
    print ('y')
elif letter == 26:
    print ('z')

It basically generates a random number out of 26 and then converts into its corresponding letter.它基本上从 26 个中生成一个随机数,然后转换为其相应的字母。 This could defiantly be improved but I am only a beginner and I am proud of this piece of code.这可以大胆改进,但我只是一个初学者,我为这段代码感到自豪。

Maybe this can help you:也许这可以帮助你:

import random
for a in range(64,90):
    h = random.randint(64, a)
    e += chr(h)
print e

Place a python on the keyboard and let him roll over the letters until you find your preferd random combo Just kidding!在键盘上放置一条蟒蛇,让他在字母上滚动,直到找到您喜欢的随机组合 开玩笑!

import string #This was a design above but failed to print. I remodled it.
import random
irandom = random.choice(string.ascii_letters) 
print irandom

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM