離散數學實驗一
阿新 • • 發佈:2020-12-11
1. 已知命題p和q的真值,求這兩個命題的合取、析取、異或、蘊含及等價命題的真值.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/9/18 09:33
# @Author : Albert Darren
# @File : 離散數學實驗一.py
# @Software: PyCharm
# 實驗1
def experiment1(loop_count=4):
truth_value = [0, 1]
while loop_count > 0:
# 請求使用者輸入
p_value = eval(input('請輸入命題p的真值(1或者0):'))
q_value = eval(input('請輸入命題q的真值(1或者0):'))
if p_value not in truth_value or q_value not in truth_value:
print('您的輸入不合法,請重新輸入')
else:
print('邏輯運算結果'.center(20, '-'))
print('p{}q的真值為:{}'.format(chr (ord('\u2227')), p_value & q_value))
print('p{}q的真值為:{}'.format(chr(ord('\u2228')), p_value | q_value))
print('p{}q的真值為:{}'.format('^', p_value ^ q_value))
print('p{}q的真值為:{}'.format(chr(ord('\u2192')), int(not p_value or q_value)))
print('p等價於q的真值為:{}' .format(int(p_value == q_value)))
print('-' * 20)
loop_count -= 1
2. 輸出以下命題公式的真值表、主析取正規化和主合取正規化
def experiment2():
"""
輸出命題公式:(p∨q)→r的真值表,主析取正規化,主合取正規化
"""
truth_value = [0, 1]
# 主析取正規化
dnf = []
# 主合取正規化
cnf = []
# 打印表頭
print('真值表'.center(20, '-'))
print(' {} {} {} | {:^7} | {}'.format('p', 'q', 'r', '(p \u2228 q)', '(p \u2228 q) \u2192 r'))
for p in truth_value:
for q in truth_value:
for r in truth_value:
print(' {} {} {} | {:^7} | {:^12}'.format(p, q, r, (p | q), int(not (p | q) or r)))
decimal_index = int(str(p) + str(q) + str(r), 2)
if not (p | q) or r:
dnf.append('m' + str(decimal_index))
else:
cnf.append('M' + str(decimal_index))
print('主合取正規化:' + '\u2227'.join(cnf))
print('主析取正規化:' + '\u2228'.join(dnf))
3. 計算與探索(選做):找出一些這樣的正整數:它可以用兩種不同的方式寫成兩個正整數的立方和,例如
def experiment3(start: int, stop: int):
# 存放滿足要求的整數
num_set = []
# 取出尋找範圍內的每一個正整數
for number in range(start, stop + 1):
min_num = 1
max_num = int(pow(number, 1 / 3))
# 取出第一個數
count = 0
for first_num in range(min_num, max_num + 1):
# 取出第二個數
for second_num in range(min_num, max_num):
if number == pow(first_num, 3) + pow(second_num, 3):
# print('{}={}^3+{}^3'.format(number, first_num, second_num))
count += 1
if count == 2:
num_set.append(number)
return num_set
4.測試
if __name__ == '__main__':
# double_cube_int()
# 執行效率:35.3 ms ± 8.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
print(experiment3(10, 1000))
# 執行結果:[559, 855]
# 執行效率:55.9 ms ± 2.23 ms per loop((mean ± std. dev. of 7 runs, 10 loops each)
# experiment2()