所以基本上我不确定为什么我的if语句不起作用,我认为这可能是因为我的列表中有列表名称,但我不确定。感谢您的帮助,谢谢!
def calc_fare(colour, distance, zonestart, zoneend):
farelist = [colour, distance, zonestart, zoneend]
red = [2.00, 2.50, 4.50, 6.50]
silver = [1.80, 2,30, 4.10, 5.80]
blue = [0.90, 1.15, 2.05, 2.90]
gold = [3.60, 4.60, 8.20, 11.60]
z1 = ['z2', 'z3', 'z7']
z2 = ['z1', 'z3', 'z6']
z3 = ['z1', 'z2', 'z4', 'z6', 'z7']
z4 = ['z3', 'z5', 'z6', 'z7']
z5 = ['z4', 'z6']
z6 = ['z2', 'z3', 'z4', 'z5']
z7 = ['z1', 'z3', 'z4']
if zonestart in zoneend:
return colour[2]
else:
return "test if statement failed"
def main():
print (calc_fare((str(input('Please enter colour'))), (float(input('Please enter distance'))), (str(input('Please enter starting zone'))), (str(input('Please enter ending zone')))))
#print(calc_fare("silver", 8.5, "z3", "z6"))
main()
首先,您在calc_fare
中声明了一组根本没有使用的局部变量;让我们从删除这些开始:
def calc_fare(colour, distance, zonestart, zoneend):
if zonestart in zoneend:
return colour[2]
else:
return "test if statement failed"
distance
参数也未使用:
def calc_fare(colour, zonestart, zoneend):
if zonestart in zoneend:
return colour[2]
else:
return "test if statement failed"
剩下的只是一个函数,如果第二个参数的值包含在第三个参数中,则返回第一个参数引用的值中的第三个项。
有了这些信息,你应该试着重新考虑你最初的要求。
至于将列表放在其他列表中;如果您有:
l1 = [1, 2, 3]
l2 = [l1, 4, 5, 6]
你最终得到的相当于:
l1 = [1, 2, 3]
l2 = [[1, 2, 3], 4, 5, 6]
不是
l2 = [1, 2, 3, 4, 5, 6]
如果要将l1
"飞溅"到l2
中,则需要:
l2 = l1 + [1, 2, 3]
或
l2 = [-3, -2, -1] + l1 + [4, 5, 6]
或者其他什么。
关于引用已定义的变量
'foo'
和"foo"
创建一个包含文本"foo"的字符串;foo
指的是一个名称为"foo"的变量。如果你不明白这一点,我强烈建议你为绝对初学者买一本关于Python(或任何其他语言)的书。
l1 = [1, 2, 3]
l2 = ['l1', 4, 5, 6]
会给你一个包含4项的列表:字符串"l1"后面跟着整数4、5、6。
使用locals()
可以实现您想要的目标,但这并不是一个很好的实践。我建议存储到对象的实际链接,而不仅仅是它们的名称。
EDIT:以为例
>>> z1 = ['z2', 'z3', 'z7']
>>> z2 = ['z1', 'z3', 'z6']
>>> locals()[z1[0]]
['z1', 'z3', 'z6']