我在标题中描述的 Python 语言中遇到了问题。
for slovo in slova:
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
for i in range (len(randRijec)):
if slovo["name"] in randRijec[i]:
if i == 0:
slovo1 = randRijec[i].upper()
prvoSlovo = 1
...
...
else:
pogresnoBrojac += 1
slova.remove(slovo)
所以,即使这个IF语句是 true ,也正在执行ELSE语句!但是,如果 if语句已满足,则应跳过 else语句。
如何解决此问题?
P.S。我之前几次遇到过这个问题而且我无法解决它......
答案 0 :(得分:3)
代码中有多个标签和空格:
运行cat -A test.py
(在Unix上)产生
for slovo in slova:$
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):$
for i in range (len(randRijec)):$
if slovo["name"] in randRijec[i]:$
if i == 0:$
slovo1 = randRijec[i].upper()$
prvoSlovo = 1$
^I^I^I^I^I^I...$
^I^I^I^I^I^I...$
else:$
pogresnoBrojac += 1$
slova.remove(slovo)$
^I
表示标签。
因此,else
块不会被解释为处于出现的缩进级别。
你的python代码永远不应该混合标签和空格来缩进。您可以通过运行python -t script.py
来检查脚本是否混合了标签和空格。
在Python中,您必须承诺仅使用空格或仅使用制表符进行缩进。 PEP8建议仅使用空格缩进。
您可以使用reindent.py program将标签转换为空格。
答案 1 :(得分:2)
所以,即使这个IF语句是真的,ELSE语句也在执行!
我可以向你保证,这不会发生。
我注意到在代码的大纲中if
位于for
循环中。请确保在您的实际代码中else
不会意外地与for
而不是if
对齐。我不止一次见过这个错误。
在Python中,for
-else
is a valid construct。例如,以下是完全有效的Python:
for i in range(10):
if i < 100:
pass
else:
print 'In else clause'
运行时,会打印出In else clause
。
将此与以下内容进行对比,后者在运行时不会打印任何内容:
for i in range(10):
if i < 100:
pass
else:
print 'In else clause'
答案 2 :(得分:0)
这是很久以前的一个问题,我在对同一问题进行故障排除时偶然发现了这个问题-解决方案实际上很愚蠢,很可能也是这样-因为它是一个for循环,它遍历每个列表元素,即使这些元素之一都不满足if条件,它也会自动触发else-很不言而喻,但对于初学者来说很容易错过。 好吧,至少这是我的问题:)
答案 3 :(得分:-1)
下一个解决方案解决了我的问题:
for slovo in slova:
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
xy = 0
for i in range (len(randRijec)):
if slovo["name"] in randRijec[i]:
xy = 1
if i == 0:
slovo1 = randRijec[i].upper()
prvoSlovo = 1
break
if i == 1:
slovo2 = randRijec[i].upper()
drugoSlovo = 1
break
slova.remove(slovo)
if xy == 0:
pogresnoBrojac += 1
...
...
...
xy = 1
pygame.display.update()
time.tick(value)
所以,我刚刚添加了 xy 计数器,这使得我的代码可以正常工作。当 IF 语句满足时, xy 变为 1 ,如果 IF 语句未满足, xy 设置为 0 ,然后执行此“ else ”语句。在代码的末尾, xy 再次设置为 1 ,以防止执行此“else”( if xy == 0 )块。
感谢您的帮助!