如何使用 .join 和 for 循环制作随机十六进制代码生成器?
Posted
技术标签:
【中文标题】如何使用 .join 和 for 循环制作随机十六进制代码生成器?【英文标题】:How would I make a random hexdigit code generator using .join and for loops? 【发布时间】:2013-11-19 21:58:52 【问题描述】:我是编程新手,我必须做的一项任务是使用 for 循环和 .join 创建一个随机的十六进制颜色代码生成器。 我下面的程序是否与您的操作方式接近,还是完全关闭? 还有,有没有办法让随机数量的数字和字母出现在 6 以内?
import random
str = ("A","B","C","D","E","F","G","H")
seq = ("1","2","3","4","5","6", "7","8","9")
print '#',
for i in range(0,3):
letter = random.choice(str)
num = random.choice(seq)
print num.join(letter),
print letter.join(num)
【问题讨论】:
【参考方案1】:字符串可以被迭代,所以我的代码看起来像这样。
import random
def gen_hex_colour_code():
return ''.join([random.choice('0123456789ABCDEF') for x in range(6)])
if __name__ == '__main__':
print gen_hex_colour_code()
结果
In [8]: 9F04A4
In [9]: C9B520
In [10]: DAF3E3
In [11]: 00A9C5
然后你可以把它放在一个单独的文件中,例如,myutilities.py
然后在你的主 python 文件中,你会像这样使用它:
import myutilities
print myutilities.gen_hex_colour_code()
只有当您直接运行 myutilities.py 文件时,if __name__ == '__main__':
部分才会被执行。当您从另一个文件导入它时,它不会执行。这通常是测试功能的地方。
另外,请注意,这是使用 Python 2.7 的语法。在 Python 3.0 中,一个主要区别是 print 是一个函数,您必须使用 print(gen_hex_colour_code()) 代替。如果您感到困惑,请参阅http://docs.python.org/3.0/whatsnew/3.0.html 以了解有关情况有何不同的更多信息。
为什么我还要使用 Python 2.7?许多科学 Python 模块仍在使用 2.7 变体,但对于 Python 新手,我建议您坚持使用 3.0
【讨论】:
由于您正在学习 python,我将添加更多关于您将如何使用我的代码的 cmets。【参考方案2】:一种紧凑的方法是使用list comprehensions(这是一种特定的for循环):
>>> alpha = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F")
>>> ''.join([random.choice(alpha) for _ in range(6)])
'4CFDE4'
您可以使用range
和map
缩短字母行:
>>> alpha = map(str, range(10)) + ["A", "B", "C", "D", "E", "F"]
或者只是使用一个字符串:
>>> alpha = "ABCDEF0123456789"
附言。既然颜色是十六进制的,为什么不直接生成一个随机数,然后转成十六进制呢?
>>> hex(random.randint(0, 16777215))[2:].upper()
'FDFD4C'
【讨论】:
如果您想知道为什么是 16777215,即 16^6 或 #FFFFFF。【参考方案3】:import random
keylist='0123456789ABCDEF'
password=[]
length=15
while len(password) < length:
a_char = random.choice(keylist)
password.append(a_char)
print(''.join(password))
【讨论】:
以上是关于如何使用 .join 和 for 循环制作随机十六进制代码生成器?的主要内容,如果未能解决你的问题,请参考以下文章