Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python创建自己的数字系统_Python - Fatal编程技术网

使用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

我正在制作一个猜测密码的小程序

我制作这个程序只是为了学习,我想通过制作一个真正有意义的程序来提高我的python技能

例如:

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