0

我的 python 代码有问题,但我不确定它是什么。我正在创建一个程序,该程序创建一个包含所有可能的四位数字组合的表格,前提是数字不重复,我知道这是成功的。然后,我创建另一个表并尝试将所有使用相同数字以不同顺序的值添加到该辅助表中(所以我没有,例如,1234、4321、3241、3214、1324、2413 等。在这张桌子上。)但是,这似乎不起作用,因为第二张桌子只有一个值。我做错了什么?我的代码如下。哦,我知道一个值来自于在顶部附加 1。

    combolisttwo = list()
    combolisttwo.append(1)
    combolist = {(a, b, c, d) for a in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for b in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for c in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for d in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} if a != b and a != c and a != d and b != c and b != d and c!=d}
    for i in combolist:
        x = 0
        letternums = str(i)
        letters = list(letternums)
        for g in letters:
            n = 0
            hits = 0
            nonhits = 0
            letterstwo = str(combolisttwo[n])
            if g == letterstwo[n]:
                hits = hits + 1
            if g != letterstwo[n]:
                nonhits = nonhits + 1
            if hits == 4:
                break
            if hits + nonhits == 4:
                combolisttwo.append(i)
                break




    x = len(combolisttwo)

    print (x)
4

2 回答 2

4

如果数字不重复,所有可能的四位数字组合

import itertools as IT
combolist = list(IT.combinations(range(10), 4))

然后,我创建另一个表并尝试将所有使用相同数字以不同顺序的值添加到该辅助表中(所以我没有,例如,1234、4321、3241、3214、1324、2413 等。在这张桌子上。)

combolist2 = [item for combo in combolist
              for item in IT.permutations(combo, len(combo))]

有用的参考资料:

  • 组合——用于枚举元素集合而不替换
  • permutations -- 用于枚举所有可能顺序的元素集合
于 2013-09-16T23:58:12.300 回答
2

这段代码很混乱 ;-) 例如,您n = 0在内部循环中有,但从未设置n为其他任何内容。另一方面,你有x = 0,但从不使用x. 等等。

使用itertools确实是最好的,但如果你想自己学习如何做这些事情,那很好。首先,更改您的:

    letters = list(letternums)

    letters = list(letternums)
    print(letters)
    break

我敢打赌,你会惊讶于你所看到的!你的元素combolist是元组,所以当你这样做时,你letternums = str(i)会得到一个混合了数字、空格、括号和逗号的字符串。我不认为你期待任何东西,但数字。

letterstwo是字符串“1”(总是,因为你从不改变n)。但这并不重要,因为每次循环迭代时都将hitsand设置nonhits为 0 。所以and永远不能大于 1。for g in lettershitsnonhits

这回答了你的字面问题;-) combolisttwo.append(i)永远不会执行,因为 hits + nonhits == 4永远不会是真的。这就是为什么combolisttwo保持其初始值 ( [1])。

print()在你的代码中调用一些?这将帮助您了解发生了什么问题。

于 2013-09-17T00:53:14.210 回答