编程题目:打印输出逻辑运算表
编程内容及要求:
编写程序,打印输出9种基本逻辑运算符(与、或、非、条件、双条件、异或、与非、或非、条件否定)的运算表到字符文件logic.txt中。
编程语言可选择C、C++、Java或Python。
逻辑运算表输出格式示例:
------------------
P Q 条件否定
------------------
T T F
T F T
F T F
F F F
------------------
编程目的:学会用程序语言提供的基本逻辑运算功能实现所有9种逻辑运算。
代码
from typing import Callable, List, Tuple
def init_p_q() -> List[Tuple[bool]]:
return [(True, True), (True, False), (False, True), (False, False)]
def cstr(b: bool) -> str:
return 'T' if b else 'F'
def negation(p: bool) -> bool:
return not p
def conjunction(p: bool, q: bool) -> bool:
return p and q
def disjunction(p: bool, q: bool) -> bool:
return p or q
def implication(p: bool, q: bool) -> bool:
return not p or q
def biconditional(p: bool, q: bool) -> bool:
return p == q
def exclusive_or(p: bool, q: bool) -> bool:
return p != q
def nand(p: bool, q: bool) -> bool:
return not (p and q)
def nor(p: bool, q: bool) -> bool:
return not (p or q)
def nonimplication(p: bool, q: bool) -> bool:
return p and not q
def generate_truth_table(operation: Callable) -> List[str]:
if operation == negation:
table = [(p, operation(p)) for p in [True, False]]
else:
table = [(p, q, operation(p, q)) for p, q in init_p_q()]
return table
def format_truth_table(operation_name: str, table: List[str]) -> str:
header = f"{operation_name}\n{'-' * 20}\n P {' Q' if len(table[0]) == 3 else ''} Result\n{'-' * 20}\n"
formatted_table = ""
for row in table:
formatted_row = f"{'T' if row[0] else 'F'} {'T' if len(row) == 3 and row[1] else 'F'}{' T' if row[-1] else ''}{' F' if not row[-1] else ''}\n"
formatted_table += formatted_row
return header + formatted_table
def save_to_file(file_name: str, content: str) -> None:
with open(file_name, "w") as file:
file.write(content)
def main():
operations = {
"Negation": negation,
"Conjunction": conjunction,
"Disjunction": disjunction,
"Implication": implication,
"Biconditional": biconditional,
"Exclusive OR": exclusive_or,
"NAND": nand,
"NOR": nor,
"Nonimplication": nonimplication,
}
all_formatted_tables = ""
for operation_name, operation in operations.items():
truth_table = generate_truth_table(operation)
formatted_table = format_truth_table(operation_name, truth_table)
all_formatted_tables += formatted_table + "\n"
save_to_file("logic.txt", all_formatted_tables)
print("All truth tables saved to logic.txt")
if __name__ == '__main__':
main()
解释
这段代码可以生成包含逻辑运算的真值表,并将其保存到一个文本文件中。代码定义了各种逻辑运算(例如否定、合取、析取等),并分别计算它们的结果。以下是详细用法的说明:
-
定义逻辑运算函数:代码首先定义了一系列逻辑运算的函数,如
negation
、conjunction
、disjunction
等。这些函数接收两个布尔值参数p
和q
,并返回相应逻辑运算的结果。 -
生成真值表:
generate_truth_table
函数接收一个逻辑运算函数作为参数,并使用init_p_q
函数初始化p
和q
的组合。对于否定运算,函数会生成一个包含两个布尔值的列表;对于其他运算,函数会生成一个包含四个布尔值对的列表。然后,它会应用逻辑运算函数并生成一个真值表。 -
格式化真值表:
format_truth_table
函数接收逻辑运算的名称(例如"Conjunction")和真值表,并将其格式化为一个易于阅读的字符串。字符串包含一个标题行,用于显示逻辑运算的名称,以及一个表格,显示p
、q
和运算结果的组合。 -
保存到文件:
save_to_file
函数接收一个文件名和要保存的内容。它会创建一个新的文本文件(或覆盖现有文件),并将内容写入该文件。 -
主函数:
main
函数定义了一个包含逻辑运算名称和相应函数的字典。对于字典中的每个逻辑运算,它会生成一个真值表,将其格式化,然后将格式化后的真值表添加到一个字符串中。最后,它会调用save_to_file
函数将所有格式化的真值表保存到一个名为logic.txt
的文件中,并在屏幕上显示一条消息,通知用户所有真值表已保存。
要运行这段代码,只需将其复制到一个新的Python文件(例如truth_tables.py
)并运行该文件。完成后,你会在当前目录下找到一个名为logic.txt
的文件,其中包含所有逻辑运算的真值表。