DFarm

Posted on Sep 12, 2022Read on Mirror.xyz

用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 的更多方法和解释,完整说明可以参考这篇文章:

https://segmentfault.com/a/1190000038925492

总量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 应用的一个小场景,希望对你有所帮助。

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

ENS