python - 如何改进我的随机字符串生成器
问题描述
我设法创建了一个简单的随机字符串生成器,它打印一个随机的字母字符串,x 次,列表中的每次迭代具有 3-10 个字符之间的随机长度。我是 Python 新手,还在学习非常基础的东西,所以请耐心等待。我的程序按预期工作,但我很确定我的代码可以优化。我真的很想学习最佳实践并扩展我的知识。这是我的第一篇文章。抱歉,如果我在错误的地方。
import random
class Randomize:
alphabet = ['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']
choice1 = random.choice(alphabet)
choice2 = random.choice(alphabet)
choice3 = random.choice(alphabet)
choice4 = random.choice(alphabet)
choice5 = random.choice(alphabet)
choice6 = random.choice(alphabet)
choice7 = random.choice(alphabet)
choice8 = random.choice(alphabet)
choice9 = random.choice(alphabet)
choice10 = random.choice(alphabet)
three_letters = choice1 + choice2 + choice3
four_letters = choice1 + choice2 + choice3 + choice4
five_letters = choice1 + choice2 + choice3 + choice4 + choice5
six_letters = choice1 + choice2 + choice3 + choice4 + choice5 + choice6
seven_letters = choice1 + choice2 + choice3 + choice4 + choice5 + choice6 + choice7
eight_letters = choice1 + choice2 + choice3 + choice4 + choice5 + choice6 + choice7 + choice8
nine_letters = choice1 + choice2 + choice3 + choice4 + choice5 + choice6 + choice7 + choice8 + choice9
ten_letters = choice1 + choice2 + choice3 + choice4 + choice5 + choice6 + choice7 + choice8 + choice9 + choice10
word_length = [three_letters, four_letters, five_letters, six_letters, seven_letters, eight_letters, nine_letters, ten_letters]
word = random.choice(word_length)
def gen(self):
for i in range(10):
print (Randomize.word)
Randomize.choice1 = random.choice(Randomize.alphabet)
Randomize.choice2 = random.choice(Randomize.alphabet)
Randomize.choice3 = random.choice(Randomize.alphabet)
Randomize.choice4 = random.choice(Randomize.alphabet)
Randomize.choice5 = random.choice(Randomize.alphabet)
Randomize.choice6 = random.choice(Randomize.alphabet)
Randomize.choice7 = random.choice(Randomize.alphabet)
Randomize.choice8 = random.choice(Randomize.alphabet)
Randomize.choice9 = random.choice(Randomize.alphabet)
Randomize.choice10 = random.choice(Randomize.alphabet)
Randomize.three_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3
Randomize.four_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4
Randomize.five_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5
Randomize.six_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5 + Randomize.choice6
Randomize.seven_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5 + Randomize.choice6 + Randomize.choice7
Randomize.eight_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5 + Randomize.choice6 + Randomize.choice7 + Randomize.choice8
Randomize.nine_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5 + Randomize.choice6 + Randomize.choice7 + Randomize.choice8 + Randomize.choice9
Randomize.ten_letters = Randomize.choice1 + Randomize.choice2 + Randomize.choice3 + Randomize.choice4 + Randomize.choice5 + Randomize.choice6 + Randomize.choice7 + Randomize.choice8 + Randomize.choice9 + Randomize.choice10
Randomize.word_length = [Randomize.three_letters, Randomize.four_letters, Randomize.five_letters, Randomize.six_letters, Randomize.seven_letters, Randomize.eight_letters, Randomize.nine_letters, Randomize.ten_letters]
Randomize.word = random.choice(Randomize.word_length)
name = Randomize()
name.gen()
print('Generated 10 names.')
编辑*
我发现结合我收到的建议效果最好。这是比我的第一次尝试要好得多的新版本。使用 .join 和参数 k 来设置每个字符串生成的长度对我来说是一个巨大的启示。谢谢。
import random
def gen():
ltrs = list('abcdefghijklmnopqrstuvwxyz')
word = "".join(random.choices(ltrs, k=random.randint(3,10)))
for i in range(1000):
print(word)
word = "".join(random.choices(ltrs, k=random.randint(3,10)))
gen()
解决方案
欢迎来到本站!
有几种方法可以从集合中随机选择事物。您可以在以下位置查看 dox:
random.choice()
random.choices()
random.sample()
寻找灵感。此外,numpy
图书馆有一些选择。
如果您想更换样品,那么random.choices
是一个不错的选择
In [7]: from random import choices
In [11]: a = list('abcdefghijklmnopqrstuvwxyz')
In [12]: choices(a, k=10)
Out[12]: ['l', 'a', 'c', 'y', 's', 'u', 'c', 'n', 'g', 'n']
In [13]:
推荐阅读
- c++ - 使用 2 个库(Qt 和 PCL)时的 cmake 不匹配
- .net - C# .NET 控制器不需要的 Ascii 转换
- unit-testing - Grails 单元测试控制器字段
- google-apps-script - Gsuite Apps 脚本 API:AdminLicenseManager.LicenseAssignments - .update 上的错误
- c - Clang 前端:跟踪语句的读取和写入
- json - 无法使用 SwiftyJSON 访问 JSON 数据
- vue.js - 使用 vue js 更改 Leaflet js 地图颜色
- spring - @EnableOAuth2Sso 和 @EnableResourceServer 在同一个应用程序中
- reactjs - 反应 axios 一一获取值
- amazon-web-services - 如何将bucket-owner-full-control授予从一个帐户中的redshift卸载到另一个帐户中的s3存储桶的文件?