我有以下脚本:
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和一般编程的新手,所以我可能缺少一些基本的东西。谢谢你的建议。
答案 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
列表中的不同条目而不是整个列表。