将bool值传递给函数

时间:2014-05-27 09:01:01

标签: python-2.7 boolean

我有以下脚本:

color = False
shape = False
light = False

print 'Starting conditions: \ncolor %s \nshape %s \nlight %s' % (color, shape, light)

c = raw_input("'c' to set color > ")
s = raw_input("'s' to set shape > ")
l = raw_input("'l' to set light > ")

args = []
args.append(c)
args.append(s)
args.append(l)

print "You selected: \ncolor %s \nshape %s \nlight %s" % (c, s, l)
raw_input()
print "Argument list: ", args
raw_input

for item in args:
    if 'c' in args:
        color = True
    elif 's' in args:
        shape = True
    elif 'l' in args:
        light = True

print "Now the final function..."
raw_input()


def funcs(color, shape, light):
    print "Color: %s \nShape: %s \nLight: %s" % (color, shape, light)

funcs(color, shape, light)

我的输出是这样的:

[...]
>>> Now the final function...

>>> Color: True 
>>> Shape: False 
>>> Light: False

我可以'似乎弄清楚为什么其他值没有改为True,可能我的循环不对?我是Python和一般编程的新手,所以我可能缺少一些基本的东西。谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

你的循环

for item in args:
    if 'c' in args:
        color = True
    elif 's' in args:
        shape = True
    elif 'l' in args:
        light = True

它遍历列表args,其中包含3个项目,因此它循环3次。首先,它会检查'c'中是否有args,如果是color = True,它会设置elif,并且永远不会输入任何args

现在因为你循环遍历if 'c' in args:,然后在每次迭代时检查if,每次迭代都会输入'c',因为每次args仍然在{ {1}}。

你可能想做什么:

for item in args:
    if 'c' in item:
        color = True
    elif 's' in item:
        shape = True
    elif 'l' in item:
        light = True

(将in args:更改为in item:

这将检查当前item,即每次迭代每次检查args列表中的不同条目而不是整个列表。