为澄清起见,我不仅只想要一个随机字母词。稍后,我还需要代码中的随机数。
我编写了以下代码,给出了一个随机的7个字母的单词。
这是代码:-
import random
key_num = []
for initial_num in range(7):
key_num.append(random.randrange(1,26))
def value(n):
return (chr(int(n) + 64))
print value(key_num[0]) + value(key_num[1]) + value(key_num[2]) + value(key_num[3]) + value(key_num[4]) + value(key_num[5]) + value(key_num[6])
我的问题是,有没有更好的方法使用随机数来连接单词?
答案 0 :(得分:1)
import string
word = "".join(random.choice(string.ascii_lowercase) for _ in range(string_length)]
我将如何制作随机字符串
答案 1 :(得分:1)
有许多不同的方法可以解决此问题并改善您的代码。您绝对应该检出str.join
和list comprehensions。
如果您想尽可能地坚持原始代码,该基本解决方案如何:
import random
key_num = []
for initial_num in range(7):
key_num.append(random.randrange(1,26))
def value(n):
return (chr(int(n) + 64))
# so far unchanged, here comes the new bit:
print ''.join(value(k) for k in key_num)
答案 2 :(得分:1)
您已标记问题Python2.7。如果可以改用Python3,则可以使用random.choices使事情变得简单:
from string import ascii_lowercase
from random import choices
print ("".join(choices(ascii_lowercase,k=7)))
如果您陷在Python2中,则可以这样实现一个(简单的)random.choices
:
from random import choice
def choices(s,k=1):
return [choice(s) for _ in xrange(k)]
答案 3 :(得分:0)
您可以在单个for循环中实现串联。
尝试以下代码:
import random
key_num = []
for initial_num in range(7):
key_num.append(random.randrange(1,26))
def value(n):
return (chr(int(n) + 64))
final_string = ""
for i in range(7): # Range of Numbers you want
final_string += value(key_num[i]) # Concatenate random character
print final_string
答案 4 :(得分:0)
这是一种方法:
from random import randrange
from string import ascii_lowercase
def random_str(length=7):
return ''.join(ascii_lowercase[randrange(len(ascii_lowercase))] for _ in range(length))
ascii_lowercase
只是'abcdefghijklmnopqrstuvwxyz'
;我从中选择一个随机条目,然后将单个字母与str.join
连接起来。
...实际上random.choice
更适合于此。参见this answer。