所以基本上我不确定为什么我的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()
答案 0 :(得分:1)
首先,您要在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 ..
答案 1 :(得分:-1)
您可以使用locals()
完成您想要的任务,但这不是一个好习惯。我建议将实际链接存储到对象而不仅仅是它们被称为。
编辑:作为一个例子
>>> z1 = ['z2', 'z3', 'z7']
>>> z2 = ['z1', 'z3', 'z6']
>>> locals()[z1[0]]
['z1', 'z3', 'z6']