python 格式的逻辑表
Logic tables in python with format
所以我在 Python 中有一个简短的问题。
比如说,我正在 python (AND, OR, XOR, XNOR etc)
中实现基本逻辑门
像这样:
或门
def OR(a,b):
if a == True or b == True:
return True
else:
return False
异或门或异或门
def XOR(a,b):
if a != b:
return True
else:
return False
异或门或异或门的逻辑补码
def XNOR(XOR):
if XOR == True:
return False
else:
return True
1。
现在,我试图像这样打印它们:
print "AND Gate Table:"
print "A = False, B = False \t", AND(False, False)
print "A = True, B = False \t", AND(True, False)
print "A = False, B = True \t", AND(False, True)
print "A = True, B = True \t", AND(True, True)
这输出:
AND Gate Table:
A = False, B = False False
A = True, B = False False
A = False, B = True False
A = True, B = True True
2。那么现在我想到使用 format
为我打印 table,所以我做了:
tableformat = '{:<10}' * 6
print tableformat.format("A", "True", "B", "True", ":", AND(True, True))
但令我惊讶的是,这导致了这个
A False B True : 1
现在显然我更改了参数 AND(True, False)
并重复了上面的步骤 2,它给了我 0
。
我的问题:
现在,这很有趣,但我不明白,当我简单地打印 table 时它如何返回布尔值,但当我做基本相同的事情时返回实际的二进制值,使用 [format()][1]
打印时调用相同的函数。这很有趣,我很想了解它是如何工作的。
预先感谢您的回答。
问题是 bool.__format__()
决定了它的显示方式:
>>> True.__format__('')
'True'
>>> True.__format__('<10')
'1 '
你可以看到它如何反映上面的内容(因为它调用了上面的内容):
>>> '{}'.format(True)
'True'
>>> '{:<10}'.format(True)
'1 '
但是您可以通过使用转换操作来避免这种情况,在进行任何格式化之前强制 str(True)
:
>>> '{!s:<10}'.format(True)
'True '
相当于:
>>> str(True).__format__('<10')
'True '
在大多数情况下,bool 类型是 0 和 1 的语法糖:
>>> 1 == True
True
>>> 0 == False
True
>>> ['item0', 'item1'][True]
'item1'
>>> True + True
2
数字和布尔值之间的一个区别是 __str__()
成员函数的 return 值。 (1).__str__()
return 是字符串“1”,(True).__str__()
return 是字符串 'True'。但是,内置格式调用 format 成员函数。
>>> (1).__format__('f')
'1.000000'
>>> (True).__format__('n')
'1'
数字总是 return 其值的字符串表示形式,具体取决于格式字符串。继承地,数字只能格式化为数字,不能格式化为字符串
>>> '{:s}'.format(1)
ValueError: Unknown format code 's' for object of type 'int'
>>> '{:s}'.format(True)
ValueError: Unknown format code 's' for object of type 'bool'
当您使用 format
时,它会调用 True.__format__
。该方法未在 bool
类型上实现,但 bool
继承自 int
因此其行为与整数相同。这就是为什么你得到一个数字。
>>> bool.__format__ is int.__format__
True
当做一个简单的 print
时,会调用 __str__
方法,而 bool
class 定义了它自己的方法版本,它给你一个字符串 "True" 返回.
>>> bool.__str__ is int.__str__
False
所以我在 Python 中有一个简短的问题。
比如说,我正在 python (AND, OR, XOR, XNOR etc)
中实现基本逻辑门
像这样:
或门
def OR(a,b):
if a == True or b == True:
return True
else:
return False
异或门或异或门
def XOR(a,b):
if a != b:
return True
else:
return False
异或门或异或门的逻辑补码
def XNOR(XOR):
if XOR == True:
return False
else:
return True
1。 现在,我试图像这样打印它们:
print "AND Gate Table:"
print "A = False, B = False \t", AND(False, False)
print "A = True, B = False \t", AND(True, False)
print "A = False, B = True \t", AND(False, True)
print "A = True, B = True \t", AND(True, True)
这输出:
AND Gate Table:
A = False, B = False False
A = True, B = False False
A = False, B = True False
A = True, B = True True
2。那么现在我想到使用 format
为我打印 table,所以我做了:
tableformat = '{:<10}' * 6
print tableformat.format("A", "True", "B", "True", ":", AND(True, True))
但令我惊讶的是,这导致了这个
A False B True : 1
现在显然我更改了参数 AND(True, False)
并重复了上面的步骤 2,它给了我 0
。
我的问题:
现在,这很有趣,但我不明白,当我简单地打印 table 时它如何返回布尔值,但当我做基本相同的事情时返回实际的二进制值,使用 [format()][1]
打印时调用相同的函数。这很有趣,我很想了解它是如何工作的。
预先感谢您的回答。
问题是 bool.__format__()
决定了它的显示方式:
>>> True.__format__('')
'True'
>>> True.__format__('<10')
'1 '
你可以看到它如何反映上面的内容(因为它调用了上面的内容):
>>> '{}'.format(True)
'True'
>>> '{:<10}'.format(True)
'1 '
但是您可以通过使用转换操作来避免这种情况,在进行任何格式化之前强制 str(True)
:
>>> '{!s:<10}'.format(True)
'True '
相当于:
>>> str(True).__format__('<10')
'True '
在大多数情况下,bool 类型是 0 和 1 的语法糖:
>>> 1 == True
True
>>> 0 == False
True
>>> ['item0', 'item1'][True]
'item1'
>>> True + True
2
数字和布尔值之间的一个区别是 __str__()
成员函数的 return 值。 (1).__str__()
return 是字符串“1”,(True).__str__()
return 是字符串 'True'。但是,内置格式调用 format 成员函数。
>>> (1).__format__('f')
'1.000000'
>>> (True).__format__('n')
'1'
数字总是 return 其值的字符串表示形式,具体取决于格式字符串。继承地,数字只能格式化为数字,不能格式化为字符串
>>> '{:s}'.format(1)
ValueError: Unknown format code 's' for object of type 'int'
>>> '{:s}'.format(True)
ValueError: Unknown format code 's' for object of type 'bool'
当您使用 format
时,它会调用 True.__format__
。该方法未在 bool
类型上实现,但 bool
继承自 int
因此其行为与整数相同。这就是为什么你得到一个数字。
>>> bool.__format__ is int.__format__
True
当做一个简单的 print
时,会调用 __str__
方法,而 bool
class 定义了它自己的方法版本,它给你一个字符串 "True" 返回.
>>> bool.__str__ is int.__str__
False