和和或混淆

时间:2014-11-19 12:56:20

标签: python operators

我有一个我正在解析的文件,在同一列的每一行上都是其中一个值; 0,1或-1。我想解析这个,以便数值全部符合如下。我正在尝试通过带有和/或运算符的if语句。我无法理解和/或当我用print语句测试它时,输出打印1或打印0' s。

 Desired output:
 0
 1
-1

if number.startswith('1' and '0'):
    return number.append(' ')
print number

3 个答案:

答案 0 :(得分:3)

'1' and '0'只解析为'0'

>>> '1' and '0'
'0'

布尔运算符与英语语法结构不同!

str.startswith() method需要一组值来测试:

number.startswith(('1', '0'))

如果您的字符串以True开头或以'1'开头,则会返回'0'

但是,在这种情况下,您只需使用string formatting填写您的号码:

return format(int(number), '-2d')

这会将您的号码填充到两个字符宽的字段,留下负号的空格:\

>>> format(-1, '-2d')
'-1'
>>> format(0, '-2d')
' 0'
>>> format(1, '-2d')
' 1'

答案 1 :(得分:0)

问题是表达式'1' and '0'正在评估为bool,并将评估为'0'。整个表达式将为if number.startswith('0'):,因此永远不会检查'1'

你应该改变这个

if number.startswith('1' and '0'):

if number.startswith('1') or number.startswith('0'):

或者

if number[0] in ('1', '0'):

答案 2 :(得分:0)

首先,你正在使用具有连贯意图的.startswith,但是这些参数不起作用,试试这个:

if number.startswith('1', '0'):

其次,.append不能做你想要的。如果您想在数字前添加空格,如果它以“1”或“0”开头,请尝试以下操作:

if number.startswith('1', '0'):
    number = ' ' + number
print number

此外,.append用于将项目添加到列表的末尾,例如:

>>> list = [1, 2]
>>> list.append('x')
>>> list
[1, 2, 'x']