在python中从字典返回值 switch={(0,21):“永远不要养老金”, (21,50):“可能有养老金”, (50,65):“肯定有养老金”, (65200):“已经领取养老金了”} 对于键,开关中的值: a=输入() 如果键[0]

在python中从字典返回值 switch={(0,21):“永远不要养老金”, (21,50):“可能有养老金”, (50,65):“肯定有养老金”, (65200):“已经领取养老金了”} 对于键,开关中的值: a=输入() 如果键[0],python,python-3.x,Python,Python 3.x,当我试图执行程序时,它会引发一个错误 TypeError:“int”对象不可下标 我不知道怎么修理。请帮助当您对kev、switch中的值执行操作时,您不是从元组中获取两个值,而是从元组中获取两个值。这是因为在默认情况下,迭代字典会迭代其键 相反,您希望对switch.items()中的键、值执行,,我想您应该执行以下操作: switch = {(0,21): 'never have a pension', (21,50): 'might have a pension',

当我试图执行程序时,它会引发一个错误

TypeError:“int”对象不可下标


我不知道怎么修理。请帮助

当您对kev、switch中的值执行操作时,您不是从元组中获取两个值,而是从元组中获取两个值。这是因为在默认情况下,迭代字典会迭代其键


相反,您希望对switch.items()中的键、值执行
,我想您应该执行以下操作:

switch = {(0,21): 'never have a pension',
          (21,50): 'might have a pension',
          (50,65): 'definitely have a pension',
          (65, 200): 'already collecting pension'}
for key, value in switch:
  a=input()
  if key[0] < a< key[1]:
        print(value)
为True时:
尝试:
a=int(输入())
除值错误外:
打印('不是整数,请重试')
对于switch.items()中的k,v:
如果k[0]
根据您的需要:

while True:
    try:
        a = int(input())
    except ValueError:
        print('not an int, try again')


for k, v in switch.items():
    if k[0] < a < k[1]:
        print(v)
>>[v代表k,v在switch.items()中,如果k[0]
顺便说一句,这是一种进行多量程测试的非音速方式

如果是elif树,请考虑以下情况:

>>> [v for k, v in switch.items() if k[0] < a < k[1]]
['might have a pension']
a=input()
如果a<21:
msg='永远不要养老金'
elif a<50:
msg='可能有养老金'
elif a<65:
msg=‘绝对有养老金’
其他:
msg='已在领取养老金'
打印味精
优点:它更容易理解,避免重复端点(最有可能改变端点),即使人们设法活过200岁也能工作,并且实际上避免了原始代码中的错误(如果人们正好21岁,他们就已经在领取养老金)


缺点:代码较长,
msg
a
重复。但是,现在您可以在每种情况下实现更可定制和适当的逻辑,这一事实抵消了这一点。

感谢您的帮助。。。你能告诉我如何按照字典的要求输入和打印值吗。。我正在努力,但没有成功
a = input()

if a < 21:
    msg = 'never have a pension'
elif a < 50:
    msg = 'might have a pension'
elif a < 65:
    msg = 'definitely have a pension'
else:
    msg = 'already collecting pension'

print msg