oodjfoo 发表于 2023-5-6 23:12:45

求教大佬一个排列的问题。

游戏的二级密码忘记了。只记得应该是“字母”“数字”“数字”“字母”“数字”“数字”“字母”“数字”“数字”这样的组合。字母第一位是Q或者q。第二个应该是T,t,y,Y。第三个是P,p。数字不重复。。。求大佬帮写一段生成排列的代码。。手动试密码。。。给跪了。。

歌者文明清理员 发表于 2023-5-6 23:15:30

wait……

oodjfoo 发表于 2023-5-6 23:16:38

歌者文明清理员 发表于 2023-5-6 23:15
wait……

嗯嗯。。。{:5_92:}

歌者文明清理员 发表于 2023-5-6 23:19:28

好的,以下是一个可能的Python代码示例,可以列出所有符合您描述的密码模式的排列组合:

python
import itertools

# 定义字母和数字范围
letters1 = ['Q', 'q']
letters2 = ['T', 't', 'Y', 'y']
letters3 = ['P', 'p']
numbers = list(range(0, 10))

# 生成所有可能的排列组合
passwords = list(itertools.product(letters1, numbers, numbers, letters2, numbers, numbers, letters3, numbers, numbers))
passwords = }{p}{p}{p}{p}{p}{p}{p}{p}" for p in passwords]

# 打印所有密码
for password in passwords:
    print(password)
这份代码通过 itertools 模块中的函数 product() 和字符串格式化语法构建了所有符合要求的密码,并逐一输出每个密码。请注意,这个代码可能会输出极大的字符串列表,如果要使用,请谨慎操作。

isdkz 发表于 2023-5-6 23:22:05

既然你需要一段代码来生成所有可能的排列,我们可以使用 Python 的 itertools 模块来实现。下面是一段简单的代码来生成密码:

import itertools

# 定义候选字符
letters1 = ['Q', 'q']
letters2 = ['T', 't', 'Y', 'y']
letters3 = ['P', 'p']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# 获取所有数字不重复的排列
number_combinations = list(itertools.permutations(numbers, 6))

# 遍历所有可能字母组合
for l1 in letters1:
    for l2 in letters2:
      for l3 in letters3:
            # 对每一个数字组合进行测试
            for num_comb in number_combinations:
                result = l1 + num_comb + num_comb + l2 + num_comb + num_comb + l3 + num_comb + num_comb
                print(result)


此代码首先定义了所有可能的字母组合和数字。然后,使用 itertools.permutations 函数获取所有不重复的数字排列。接下来,代码遍历所有可能的字母组合,并根据字母和数字组合生成密码。最后,它会将所有可能的密码输出到控制台。

将此代码粘贴到 Python 文件中并运行它将生成所有可能的密码组合,然后你可以尝试每个密码,直到找到正确的那个。

oodjfoo 发表于 2023-5-6 23:24:39

isdkz 发表于 2023-5-6 23:22
既然你需要一段代码来生成所有可能的排列,我们可以使用 Python 的 itertools 模块来实现。下面是一段简单 ...

谢谢谢谢。。。

oodjfoo 发表于 2023-5-6 23:26:52

歌者文明清理员 发表于 2023-5-6 23:19
好的,以下是一个可能的Python代码示例,可以列出所有符合您描述的密码模式的排列组合:

python


大佬。我试了下这个输出的是有重复数字的。。。密码里数字是不重复的

歌者文明清理员 发表于 2023-5-6 23:29:58

oodjfoo 发表于 2023-5-6 23:26
大佬。我试了下这个输出的是有重复数字的。。。密码里数字是不重复的

非常抱歉,我的代码有误。以下是一个已经修改的代码示例,用于生成不包含重复数字的密码:

python
import itertools

# 定义字母和数字范围
letters1 = ['Q', 'q']
letters2 = ['T', 't', 'Y', 'y']
letters3 = ['P', 'p']
numbers = list(range(0, 10))

# 生成所有可能的排列组合
passwords = list(itertools.product(letters1, numbers, numbers, letters2, numbers, numbers, letters3, numbers, numbers))
passwords = }{p}{p}{p}{p}{p}{p}{p}{p}" for p in passwords]

# 去掉包含相同数字的密码
passwords =

# 打印所有密码
for password in passwords:
    print(password)
这份代码通过检查密码中的唯一数字数目,排除了包含相同数字的密码,并输出了所有符合要求的密码。希望这个代码可以满足您的需求。

oodjfoo 发表于 2023-5-6 23:30:50

歌者文明清理员 发表于 2023-5-6 23:29
非常抱歉,我的代码有误。以下是一个已经修改的代码示例,用于生成不包含重复数字的密码:

python


谢谢谢谢。。。{:5_91:}

歌者文明清理员 发表于 2023-5-6 23:32:45

oodjfoo 发表于 2023-5-6 23:30
谢谢谢谢。。。

请设置最佳答案{:10_254:}

oodjfoo 发表于 2023-5-6 23:44:22

本帖最后由 oodjfoo 于 2023-5-6 23:46 编辑

isdkz 发表于 2023-5-6 23:22
既然你需要一段代码来生成所有可能的排列,我们可以使用 Python 的 itertools 模块来实现。下面是一段简单 ...

啊。对不起。。我忘记说了。。组合还有一个是Q和TY是同时大写,或者同时小写的。。QTY大写的时候P就是小写。反过来QTY小写的话P就是大写。。这样能做吗?大概就是Q12p34T56,或者q12P34t56这样。。

oodjfoo 发表于 2023-5-6 23:46:03

歌者文明清理员 发表于 2023-5-6 23:29
非常抱歉,我的代码有误。以下是一个已经修改的代码示例,用于生成不包含重复数字的密码:

python


啊。对不起。。我忘记说了。。组合还有一个是Q和TY是同时大写,或者同时小写的。。QTY大写的时候P就是小写。反过来QTY小写的话P就是大写。。这样能做吗?大概就是Q12p34T56,或者q12P34t56这样。。

isdkz 发表于 2023-5-6 23:46:17

oodjfoo 发表于 2023-5-6 23:44
啊。对不起。。我忘记说了。。组合还有一个是Q和P是同时大写,或者同时小写的。。QP大写的时候YT就是小写 ...

当然可以。针对这个条件,我们可以修改代码如下:

import itertools

# 定义候选字符
letters1 = [['Q', 'P'], ['q', 'p']]
letters2 = [['t', 'y'], ['T', 'Y']]
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# 获取所有数字不重复的排列
number_combinations = list(itertools.permutations(numbers, 6))

# 遍历所有可能字母组合
for letters_pair in zip(letters1, letters2):
    l1, l3 = letters_pair
    for l2 in letters_pair:
      # 对每一个数字组合进行测试
      for num_comb in number_combinations:
            result = l1 + num_comb + num_comb + l2 + num_comb + num_comb + l3 + num_comb + num_comb
            print(result)


在这个版本的代码中,我们将letters1和letters2作为成对的字母组合,这样可以确保 QP 大小写一致且与 YT 大小写相反。然后我们遍历这些成对的字母组合,并生成密码。

现在,此代码将根据提供的新约束生成所有可能的密码组合,与之前一样,输出到控制台,等待你逐个尝试。

oodjfoo 发表于 2023-5-6 23:47:48

isdkz 发表于 2023-5-6 23:46
当然可以。针对这个条件,我们可以修改代码如下:




对不起,说反了。。是Q|和TY同时大小写。。。P是相反的,大概就是Q12p34T56,或者q12P34t56这样。。

歌者文明清理员 发表于 2023-5-6 23:48:53

oodjfoo 发表于 2023-5-6 23:46
啊。对不起。。我忘记说了。。组合还有一个是Q和TY是同时大写,或者同时小写的。。QTY大写的时候P就是小 ...

好的,以下是修改后的代码示例:

python
import itertools

# 定义字母和数字范围
letters1 = ['Q', 'q']
letters2 = ['T', 't', 'Y', 'y']
letters3 = ['P', 'p']
numbers = list(range(0, 10))

# 生成所有可能的排列组合
passwords = []
for uppercase_qty in :
    cases =
    for case2 in itertools.product(letters2.upper(), repeat=2):
      if uppercase_qty:
            if "Y" in case2 and "T" not in case2:
                cases.append(("".join(case2), , numbers))
            elif "T" in case2 and "Y" not in case2:
                cases.append(("".join(case2), , numbers))
      else:
            cases.append(("".join(case2), , numbers))
   
    for case in itertools.product(*cases):
      password = "".join(str(c) for c in case)
      if len(set(password)) == len(password):
            passwords.append(password)

# 打印所有密码
for password in passwords:
    print(password)
这份代码构建了所有符合要求密码,并将所有可能性分别考虑。首先,我们使用两层循环,一次遍历大写的 QTY 组合,一次遍历与之对应的小写 QTY 组合。

对于这些组合中的每一个元素,我们使用 itertools.product() 函数,将它们的所有可能组合拼接到一个大的列表中。其中,数字是所有情况下都可能出现的元素,因此在所有情况下都包含在了这个列表中。

当我们考虑大写的 QTY 组合时,需要进一步检查字母 P 是大写还是小写。如果 QTY 中所有字母都是大写的,那么 P 必须是小写的。反之,如果 QTY 中所有字母都是小写的,那么 P 必须是大写的。我们可以使用 if-else 语句根据这些条件对组合进行分类,从而忽略不符合条件的密码。

最后,我们对每个可能性进行连接,并检查密码是否包含重复的元素。如果某个密码没有重复的元素,我们将其添加到 passwords 列表中,并通过循环逐一输出。

希望这份代码修改满足您的需求。如果您有任何问题,请随时问我!

歌者文明清理员 发表于 2023-5-6 23:50:20

oodjfoo 发表于 2023-5-6 23:47
对不起,说反了。。是Q|和TY同时大小写。。。P是相反的,大概就是Q12p34T56,或者q12P34t56这样。。

好的,以下是修改后的代码示例:

python
import itertools

# 定义字母和数字范围
letters1 = ['Q', 'q']
letters2 = ['T', 't', 'Y', 'y']
numbers = list(range(0, 10))

# 生成所有可能的排列组合
passwords = []
for q_upper in :
    for ty_comb in itertools.product(letters2, repeat=2):
      for p_upper in :
            if (q_upper and ty_comb.isupper() and ty_comb.isupper()) or (not q_upper and ty_comb.islower() and ty_comb.islower()):
                q_case = letters1.upper() if q_upper else letters1.lower()
                ty_case = "".join(ty_comb)
                p_case = letters1.lower() if p_upper else letters1.upper()
                cases =
                for case in itertools.product(*cases):
                  password = "".join(str(c) for c in case)
                  if len(set(password)) == len(password):
                        passwords.append(password)

# 打印所有密码
for password in passwords:
    print(password)
这份代码构建了所有符合要求密码,并将所有可能性分别考虑。首先,我们使用三层嵌套循环,一次遍历 Q 的大小写情况、TY 组合和 P 的大小写情况。

对于每个可能性,需要检查 Q 和 TY 是否同时为大写或小写。如果是,那么就符合要求(即,当 Q 和 TY 同时为大写或同时为小写时)。然后,我们需要根据 Q、TY 和 P 的大小写情况生成一个可能性序列。在这个序列中,每个位置对应一个可能的字符:

如果 Q 是大写的,那么我们使用大写的 Q。
如果 Q 是小写的,那么我们使用小写的 Q。
始终将 TY 中的两个字母组合,构成作为第二和第三个字符的两位。
如果 P 是小写的,那么我们使用小写的 P。
如果 P 是大写的,那么我们使用大写的 P。
数字则是所有情况下都可能出现的元素,因此在所有情况下都包含在了这个序列中。
最后,我们将该序列中的每个可能性进行连接,并检查密码是否包含重复的元素。如果某个密码没有重复的元素,我们将其添加到 passwords 列表中,并通过循环逐一输出。

希望这份代码修改满足您的需求。如果您有任何问题,请随时问我!

oodjfoo 发表于 2023-5-6 23:50:25

歌者文明清理员 发表于 2023-5-6 23:48
好的,以下是修改后的代码示例:

python


谢谢谢谢。。。{:10_254:}

歌者文明清理员 发表于 2023-5-6 23:51:22

oodjfoo 发表于 2023-5-6 23:50
谢谢谢谢。。。

请设置最佳答案

isdkz 发表于 2023-5-6 23:52:25

oodjfoo 发表于 2023-5-6 23:47
对不起,说反了。。是Q|和TY同时大小写。。。P是相反的,大概就是Q12p34T56,或者q12P34t56这样。。

了解了。这是根据你的新要求修改后的代码:

import itertools

# 定义候选字符组合
letters_qp = [['Q', 'T', 'Y'], ['q', 't', 'y']]
letters_p = ['P', 'p']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# 获取所有数字不重复的排列
number_combinations = list(itertools.permutations(numbers, 6))

# 遍历所有可能的 QTY 字母组合
for letters_qty in letters_qp:
    l1, l2, l3 = letters_qty
    # 对相反大小写的 P 进行遍历
    for p in letters_p:
      if p.lower() == l1.lower():
            continue
      # 对每一个数字组合进行测试
      for num_comb in number_combinations:
            result = l1 + num_comb + num_comb + p + num_comb + num_comb + l2 + num_comb + num_comb + l3
            print(result)


在这个修改后的代码中,我们将letters_qp定义为同时包含 Q、T 和 Y 的组合,这样可以确保 Q 和 TY 同时大写或小写。然后我们单独处理字母 P,根据提供的约束选择相反大小写的 P。遍历这些字母组合,根据字母和数字组合生成密码并输出。现在这段代码将根据你的新约束生成所有可能的密码组合。

oodjfoo 发表于 2023-5-6 23:56:48

isdkz 发表于 2023-5-6 23:52
了解了。这是根据你的新要求修改后的代码:




那啥。。密码只有9位。就是Q12p34T56这样。。最后以数字结尾。。。麻烦大佬了。。
页: [1] 2 3
查看完整版本: 求教大佬一个排列的问题。