如何使用 .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'

您可以使用rangemap 缩短字母行:

>>> 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 循环制作随机十六进制代码生成器?的主要内容,如果未能解决你的问题,请参考以下文章

生成随机的18位十六进制数字

生成随机的18位十六进制数字

js中如何利用循环数组得到一个随机的图片

在批处理文件的 for 循环中设置随机变量值会产生错误

如何在没有 for 循环的情况下生成 n 个随机数

如何使用for循环javascript制作三角形