我正在尝试在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
答案 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
将被正确设置。