1. 已知命题p和q的真值,求这两个命题的合取、析取、异或、蕴含及等价命题的真值.
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 ) :
count += 1
if count == 2 :
num_set. append( number)
return num_set
4.测试
if __name__ == '__main__' :
print ( experiment3( 10 , 1000 ) )