如果没有在python中按预期工作

时间:2015-10-20 19:19:54

标签: 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 enter age id:  "))

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

2 个答案:

答案 0 :(得分:4)

简短回答 - 您可能想要:

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

如果age_id始终是整数,请考虑将演员表丢失为str。并且重命名id,因为您需要shadowing内置方法。这种习惯会导致最烦人的错误。

更长的回答 - 您可能打算使用for .. else

  

循环语句可能有一个else子句;当循环通过列表耗尽(with for)或条件变为false(with 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.

答案 1 :(得分:2)

问题是您在循环的每次迭代中分配<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://localhost:8080/manager/text</url> <server>tomcat7</server> <path>/projecteBase</path> <username>adminscript</username> <password>adminscript</password> </configuration> </plugin> ,因此idx变量的状态完全取决于枚举中的最后一项。如果最后一项采用else分支,则idx将为0。

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