用Python组合ENS回文域名

昨天有人在微信里找我帮忙:

我们就用这个需求,来巩固一下之前学过的 Python 基础知识。

循环组合

需求很简单:26 个字母取 3 位组合,后面加上两位对应的字母组成回文。

什么是回文?就是 12321、abcba 这种组合。

所以我们只需要确认前三位就可以了,三种字母组合有多少种呢?26x26x26=17576种组合,这个组合要怎么写呢,就要用到之前学过的 for 循环了,废话少数,上代码!

list = 'abcdefghijklmnopqrstuvwxyz'  # 首先列出26个字母
words = []  # 创建一个空的列表,用来存放所有结果
for item_1 in list:  # 循环第1位字母
    for item_2 in list:  # 循环第2位字母
        for item_3 in list:  # 循环第3位字母
            word = item_1 + item_2 + item_3  # 将3个位置的字母组合,组成word
            words.append(word)  # 将所有word添加到words这个列表中
print(len(words))  # 打印所有结果的数量

上面的代码非常简单,每一行注释都写清楚了,执行之后,会打印出17576这个数字。

需求变更

如果你执行上面的代码,打印所有 word 的时候,可以看到会有 aab 或者 baa 这种组合,出现了重复字母。

对方需求表示前三位的字母不可重复:

这次需求更改之后,总量变成15600了,那么代码应该怎么写呢?

其实思路很简单,还是三次循环,每次后一位循环去掉前一位用过的字母即可。

但是这么写很累啊,都说 Python 很简单,没有简单办法吗?当然有!我们用 itertools 来写!

import itertools

list = itertools.permutations("abcdefghijklmnopqrstuvwxyz", 3) 
words = []
for item in list:
    words.append(item)
print(len(words))

首先解释一下 permutations 是啥意思:

itertools 非常强大,关于 itertools 的更多方法和解释,完整说明可以参考这篇文章:

总量15600跑完了,这次终于对了吗?

需求再次变更

我跑了一遍数据,发现这15600里面1.4万都没注册:

他说的回文变成了 ababa 这种。

再次分析这个需求,前三位 aba 本身就是一个回文,也就是说前两位字母排序且不重复即可。

那么非常简单,只需要将上一节的代码变量 3 改成 2 即可:

这650个就是最终需要的结果了,现在我们把域名拼接完整,把他们打印出来:

import itertools

list = itertools.permutations("abcdefghijklmnopqrstuvwxyz", 2)
words = []
for item in list:  # item 这里item是列表,需要循环读取成字符串
    word = ""
    for letter in item:
        word = word + letter
    #  此时已经搞到两位字母组合,只需要拼接后面的内容
    word = word + word[0] + word[1] + word[0]  # 这里第一个word就是两位字母,后面反复加上他们的第一位字母和第二位字母即可
    print(word)
    words.append(word)

运行代码之后,你的 Run 窗口应该有以下的内容打印:

注册状态查询和批量注册

查这些域名有没有被注册了,后面可以写代码完成,也可以直接复制内容粘贴到:https://rare.id/ 即可

结果不出意外:

650条记录全部被注册了,本来剩下了几十个,我那个朋友注册走了。

最后

市面上虽然有很多帮你组合的工具,但是要满足你的特殊要求往往还是自己写代码最快。

全部需求完成,只用了12行代码,效率很高。当然本文不一定是最优解,完成这个需求还有很多种解法。

以上只是 Python 应用的一个小场景,希望对你有所帮助。

本文只是以回文举例,不表示回文域名值得投资,市场有风险,投资需谨慎。

Subscribe to DFarm
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.