If-else在python中不能按预期工作

If-else在python中不能按预期工作,python,if-statement,Python,If Statement,我试图用python编写一个if/else语句,但不管我对id使用什么值,我总是得到idx=0。语法有问题吗 id = int(input("Please enter an age id: ")) for i, j in enumerate(age_id): if j == str(id): idx = i else: idx = 0 更复杂的是,当我重写如下代码时,它返回正确的idx值 id = int(input("Please ente

我试图用python编写一个if/else语句,但不管我对
id
使用什么值,我总是得到
idx=0
。语法有问题吗

id = int(input("Please enter an age id:  "))

for i, j in enumerate(age_id):
    if j == str(id):
        idx = i
    else:
        idx = 0
更复杂的是,当我重写如下代码时,它返回正确的
idx值

id = int(input("Please enter age id:  "))

idx = 0
for i, j in enumerate(age_id):
    if j == str(id):
        idx = i

简短回答-您可能需要:

try:
    idx = age_id.index(str(id))
except ValueError:
    # not in list - use 'None' as it better conveys that fact
    idx = None

如果<代码> AGEXIDID始终是一个整数,考虑丢失到“代码> STR < /代码>的强制转换。请重命名

id
,因为您是一个内置方法。这是一个习惯,可以导致最恼人的错误

更长的答案-您可能打算使用:

循环语句可能有一个else子句;当循环通过耗尽列表(使用for)或当条件变为false(使用while)而终止时执行,但当循环通过break语句终止时不执行

像这样:

for i, j in enumerate(age_id):
    if j == str(id):
        idx = i
        break
else:
    # assures idx is set if no 'break' happened
    idx = 0

一旦找到正确的年龄,您当前的代码不会停止,这意味着以后的条目可能会将
idx
重置为0。

问题是您正在分配
idx
循环的每个迭代,因此
idx
变量的状态完全取决于枚举中的最后一项。如果最后一项采用else分支,则
idx
将为0


要向自己证明这一点:设置
age\u id=['2','3']
并在提示中输入
3
。在这种情况下,
idx
将被正确设置。

age\u id
是对应于不同年龄的字符串列表。您有一个逻辑问题。在你的脑海中经历第一个循环。或者将print语句放在几个地方。它们的执行方式应该相同,但由于某些原因,它们的执行方式不同。能否为
id
提供一个示例输入?如果需要字符串,为什么要强制转换为int?谢谢!一切都解决了@只需确保你知道它的功能。看起来你真正想要的是
age\u id.index(str(id))
@ZERO那太快了!正是写下代码的时候,你已经编辑了你的代码<代码>年龄id=['2','3']
id=int(…
,既不需要字符串也不需要int,我认为没有一个可能是更好的默认值,如果你在索引0处得到匹配,如果没有匹配,你将得到idx=0,或者如果没有索引器,你将得到0。@padraickenningham
None
显然是一个更好的选择。编辑。为了向自己证明这一点:set
age\u id=['2','3']
并在提示中输入
3
。在这种情况下,
idx
将被正确设置。@dogwynn我用您的评论更新了我的答案。谢谢!