使用python创建自己的数字系统
我正在制作一个猜测密码的小程序 我制作这个程序只是为了学习,我想通过制作一个真正有意义的程序来提高我的python技能 例如:使用python创建自己的数字系统,python,Python,我正在制作一个猜测密码的小程序 我制作这个程序只是为了学习,我想通过制作一个真正有意义的程序来提高我的python技能 例如: using_characts = "abcdefghijklmnopqrstuvwxyz" # I have other characters in my alphabetic system 我想做的是这样的: for char in myCharacters: print(char) for char_1 in myCharact
using_characts = "abcdefghijklmnopqrstuvwxyz" # I have other characters in my alphabetic system
我想做的是这样的:
for char in myCharacters:
print(char)
for char_1 in myCharacters:
print(char + char_1)
for char_2 in myCharacters:
print(char + char_1 + char_2)
...etc
a
b
c
d
e
f
..etc
aa
ab
ac
..etc
ba
bb
bc
..etc
这使得该方法非动态,同时也很难实现。
输出应如下所示:
for char in myCharacters:
print(char)
for char_1 in myCharacters:
print(char + char_1)
for char_2 in myCharacters:
print(char + char_1 + char_2)
...etc
a
b
c
d
e
f
..etc
aa
ab
ac
..etc
ba
bb
bc
..etc
以下代码将为您提供长度介于
1
和max_length-1
之间的所有组合:
import itertools
combs = []
for i in range(1, max_length):
c = [list(x) for x in itertools.combinations(using_characts, i)]
combs.extend(c)
以下代码将为您提供长度介于
1
和max_length-1
之间的所有组合:
import itertools
combs = []
for i in range(1, max_length):
c = [list(x) for x in itertools.combinations(using_characts, i)]
combs.extend(c)
你可以使用,但你真的应该用一个小数字来限制自己。为更高的数字生成笛卡尔乘积可能需要很长时间:
from itertools import chain, product
chars = "abcdefghijklmnopqrstuvwxyz"
limit = 2
for perm in chain.from_iterable(product(chars, repeat=i) for i in range(1, limit+1)):
print("".join(perm))
A.
B
C
.
.
.
aa
ab
交流电
.
.
.
zy
zz
你可以使用,但你真的应该用一个小数字来限制自己。为更高的数字生成笛卡尔乘积可能需要很长时间:
from itertools import chain, product
chars = "abcdefghijklmnopqrstuvwxyz"
limit = 2
for perm in chain.from_iterable(product(chars, repeat=i) for i in range(1, limit+1)):
print("".join(perm))
A.
B
C
.
.
.
aa
ab
交流电
.
.
.
zy
zz
给你,这会有用的。如果你想让我解释任何部分,请告诉我
import itertools
using_characts = "abc"
for str_length in range(1,len(using_characts)+1):
for q in itertools.product(using_characts,repeat=str_length):
print("".join(q))
给你,这会有用的。如果你想让我解释任何部分,请告诉我
import itertools
using_characts = "abc"
for str_length in range(1,len(using_characts)+1):
for q in itertools.product(using_characts,repeat=str_length):
print("".join(q))
所以,其他答案给了你可能会工作的代码,但我想解释一个通用的方法。此算法使用堆栈跟踪下一个需要生成的内容,并继续生成,直到达到指定的最大长度
从集合导入数据
输入import-Deque、迭代器、可选
def generate_next_字符串(chars:str,base:str=“”)->迭代器[str]:
#此函数用于将给定字母表的每个字母附加到给定的基。
#在第一次运行时,它将生成
#字母表,因为默认的基数是空字符串。
对于以字符表示的c:
产生f“{base}{c}”
def generate_all_string(chars:str,maxlen:Optional[int]=None)->迭代器[str]:
#我们用发电机“播种”堆栈。这台发电机将产生所有的电能
#如上所述,字母表中的单长字母。
堆栈:Deque[Iterator[str]]=Deque([generate_next_string(chars)])
#虽然堆栈中仍有项目(生成器)。。。
堆栈时:
#…弹出下一个进行处理。
下一个字符串:迭代器[str]=stack.popleft()
#从发电机上取下我们卸下的每一样东西,
对于下一个字符串中的字符串:
#并将其发送回来电者。这是一个单一的“结果”
屈服线
#如果我们还在生成字符串,也就是说,我们还没有到达
#我们的最大长度——我们在堆栈中为
#下一个字符串长度。
如果maxlen为None或len(字符串)
您可以使用
print(“\n”.join(生成所有字符串(“abc”,maxlen=5))
进行尝试,因此,其他答案为您提供了可能有效的代码,但我想解释一种通用方法。此算法使用堆栈跟踪下一个需要生成的内容,并继续生成,直到达到指定的最大长度
从集合导入数据
输入import-Deque、迭代器、可选
def generate_next_字符串(chars:str,base:str=“”)->迭代器[str]:
#此函数用于将给定字母表的每个字母附加到给定的基。
#在第一次运行时,它将生成
#字母表,因为默认的基数是空字符串。
对于以字符表示的c:
产生f“{base}{c}”
def generate_all_string(chars:str,maxlen:Optional[int]=None)->迭代器[str]:
#我们用发电机“播种”堆栈。这台发电机将产生所有的电能
#如上所述,字母表中的单长字母。
堆栈:Deque[Iterator[str]]=Deque([generate_next_string(chars)])
#虽然堆栈中仍有项目(生成器)。。。
堆栈时:
#…弹出下一个进行处理。
下一个字符串:迭代器[str]=stack.popleft()
#从发电机上取下我们卸下的每一样东西,
对于下一个字符串中的字符串:
#并将其发送回来电者。这是一个单一的“结果”
屈服线
#如果我们还在生成字符串,也就是说,我们还没有到达
#我们的最大长度——我们在堆栈中为
#下一个字符串长度。
如果maxlen为None或len(字符串)
您可以使用
print(“\n”).join(生成所有字符串(“abc”,maxlen=5))
尝试生成所有长度的组合?这是否回答了您的问题?我刚刚添加了一个答案,告诉我关于你的帖子这是怎么回事;)如果您想逐个测试可能的密码,并且一旦找到正确的密码,就可以使用生成器。关键字是yield关键字。:)就像比特币矿工lol找到散列:你想生成所有长度的组合吗?这回答了你的问题吗?我刚刚添加了一个答案,告诉我关于你的帖子这是怎么回事;)如果您想逐个测试可能的密码,并且一旦找到正确的密码,就可以使用生成器。关键字是yield关键字。:)就像比特币矿工lol找到散列:D