很抱歉,如果不太清楚,请创建一个程序来计算公式,并使用存储在嵌套字典中的一个变量的分类值。我希望用户能够像这样从dict中提取值:
def get_value():
x = input("Material: ")
if x in materials:
y = input("Gauge: ")
if y in x:
return materials[x][y]
elif not (not (y is None) and not (y not in x)):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
有什么我搞砸的具体方法吗?每次尝试运行它时,都会得到一个Nonetype,将其设置为默认值0。 参考书目
materials = {"ss": {22: "", 21: "", 20: "0.431", 19: "", 18: ""
,17: "", 16: "", 15: "", 14: ""
,13: "", 12: "", 11: "", 10: "", 9: "", 8: ""}, }
答案 0 :(得分:1)
将行更改:将if y in x:
更改为if y in materials[x]:
,您需要检查y
是否符合x
的要求。 y in x
检查y
是否是x
的一部分
答案 1 :(得分:0)
尝试一下:
def get_value():
x = raw_input("Material: ")
if x in materials:
y = raw_input("Gauge: ")
if int(y) in materials[x]:
return materials[x][int(y)]
elif not (not (y is None) and not (y not in x)):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
您的问题是y中的x都是字符串,如果material [x]中的y也将y转换为int,则您都需要调用它们。由于输入通常返回字符串。
答案 2 :(得分:0)
您应该使用raw_input()而不是input()。
input()
会将输入评估为python代码,而raw_input()
将返回一个字符串。
此外,正如@DanielMesejo在回答中提到的那样,条件y in x
将不起作用,因为两者都是字符串。您应该检查y in materials[x]
。
def get_value():
x = raw_input("Material: ")
if x in materials:
y = int(raw_input("Gauge: "))
if y in materials[x]:
return materials[x][y]
elif not (not (y is None) and not (y not in materials[x])):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
print(get_value())
输出:
0
这不起作用,因为仪表索引是一个整数,而不是字符串。 raw_input
返回一个字符串!所以我们需要键入强制转换:
def get_value():
x = raw_input("Material: ")
if x in materials:
y = int(raw_input("Gauge: ")) # Converting raw_input response to int
if y in materials[x]:
return materials[x][y]
elif not (not (y is None) and not (y not in materials[x])):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
print(get_value())
输出:
0.431
您在第7行的表达式比所需的表达式复杂得多,因此我为您制作了一个更简单的函数:
def get_value():
material = raw_input("Material: ")
if not material or material not in materials:
return "Invalid Punch"
gauge = int(raw_input("Gauge: "))
if not gauge or gauge not in materials[material]:
return 0
return materials[material][gauge]
用法:
> python input.py
Material: ss
Gauge: 20
0.431