【问题标题】:Truth table list真值表列表
【发布时间】:2019-11-26 10:53:19
【问题描述】:

我的目标是在 python 中制作一个真值表,这是我的代码:

from re import findall

string = "xyz"

def getChars(str):
    listChars = findall(r"\w", str)

    return listChars


def createCharsTruthTable(lst):
    n = 2 ** len(lst)

    boolList = [[True for x in range(n)] for j in range(len(lst))]

    num_of_T = n / 2

    for i in range(len(boolList)):
        for j in range(len(boolList[i])):
            if j >= num_of_T:
               boolList[i][j] = False

        num_of_T /= 2

    return boolList

createCharsTruthTable(getChars(string))

问题是输出是……

[[True, True, True, True, False, False, False, False], [True, True, False, False, False, False, False, False], [True, False, False, False, False, False, False, False]]

第一个列表是正确的。我唯一的问题是后续列表,第二个列表是...

[True, True, False, False, False, False, False, False]

我的问题是如何将其变成...

[True, True, False, False, True, True, False, False]

【问题讨论】:

  • 您对真相的预期公式是什么?
  • 我没有使用任何公式作为基础。我只是编写了我认为将是获得预期输出的答案的代码。
  • 也许我的“预期”与您的“预期”不同?你不认为用更简单的术语分享你“期望”代码做什么有用吗?否则,如果我们一开始不知道代码应该做什么,作为您问题的读者,我们如何判断代码中的错误是什么?
  • 好吧,我的坏家伙,这是我第一次发布问题
  • @Absorption,你能指出你所说的真值表是什么意思吗?我认为真值表的意思只是真值表变量列中的值分配:en.wikipedia.org/wiki/Truth_table

标签: python list truthtable


【解决方案1】:

假设您只想创建一个“真值表”,第一行包含 1/2 True 值,第二行包含 2x 1/4 True,依此类推,这样表中的列将是具有该数量参数的真值函数的输入。 您不能只使用任何j 作为将False 放入表中的截止时间,因为该模式是周期性的。相反,您可以尝试将当前 j 除以 2 的幂并测试它是偶数还是奇数:

cols = 3
rows = 2**cols
boolList = [[True for x in range(rows)] for j in range(cols)]

for i in range(cols):
    for j in range(rows):
        if (j // (2**(cols-1-i))) % 2 == 1:
           boolList[i][j] = False

boolList 的结果:

[[True, True, True, True, False, False, False, False],
 [True, True, False, False, True, True, False, False],
 [True, False, True, False, True, False, True, False]]

更好的方法可能是改用itertools.product

>>> import itertools
>>> list(itertools.product([True, False], repeat=3))                        
[(True, True, True),
 (True, True, False),
 (True, False, True),
 (True, False, False),
 (False, True, True),
 (False, True, False),
 (False, False, True),
 (False, False, False)]

(请注意,此处的行和列是颠倒的,但这样可能更有意义。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2021-11-24
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多