[英]Python if Statement Invalid Syntax!? Why?
while x < len(Hand):
while y < len(Hand):
if Hand[x][0] == Hand[y][0] and y != x:
sameRank += 1
y += 1
x += 1
它突出显示“if”之前的空格并说出语法错误......没有任何意义。
我在这里没有看到任何错误,但是你可能会在if语句下方缩进块。 请注意,您的程序的其余部分使用4个空格来缩进? 尝试将缩进减少到只有4个空格并查看它是否运行。
但是,您的代码确实存在逻辑错误 。 如果不在每个x的开头重新初始化y,则不会为每个x循环y。
这是我运行的逻辑错误修复程序的示例代码:
def example():
Hand = [[1],[2],[3],[3],[4],[5],[2],[2],[1]]
x = 0
sameRank = 0
while x < len(Hand):
y = 0
while y < len(Hand):
if Hand[x][0] == Hand[y][0] and y != x:
sameRank += 1
y += 1
x += 1
if __name__ == "__main__":
example()
最后, 通过更加“pythonic” , 可以使这些代码更具可读性。 考虑一下:
def example():
Hand = [[1],[2],[3],[3],[4],[5],[2],[2],[1]]
sameRank = 0
for x in Hand:
for y in Hand:
if x[0] == y[0] and y != x:
sameRank += 1
if __name__ == "__main__":
example()
此代码迭代Hand
的内容,而不是递增临时整数变量,然后将其与索引运算符一起使用。 它更好,因为有更少的“维护”行(例如x += 1
),它更具可读性,并且它对类型不敏感,因为它适用于任何包含列表的可迭代对象。
或者甚至(根据海登的评论):
def example():
Hand = [[1],[2],[3],[3],[4],[5],[2],[2],[1]]
sameRank = sum(1 for x in Hand for y in Hand if x[0] == y[0] and y!=x)
if __name__ == "__main__":
example()
1 for x in Hand for y in Hand if x[0] == y[0] and y!=x
此代码将对sum
函数的调用与1 for x in Hand for y in Hand if x[0] == y[0] and y!=x
的生成器表达式 1 for x in Hand for y in Hand if x[0] == y[0] and y!=x
结合起来。 表达式返回一个生成器 ,它为列表中与您的条件匹配的每个项目生成 1,sum函数将所有这些1相加,从而为您提供了sameRank
之后的值。
看看这篇文章 ,可以很好地概述python习语。
最后,我不确定你正在使用什么编辑器,但是如果你直接从解释器的stderr / stdout获取对话框而不是消息和回溯,它听起来就像掩盖了真正的问题。 当你想要学习时,有时候编辑的太多帮助是非常糟糕的。 我个人使用Vim ,但这对初学者来说可能有点多了。 我对IDLE没有多少经验(甚至可能是你正在使用的),但我听说过将它用作学习工具的好东西。 但是,如果你正在进行认真的开发,你很快就会成长。 无论哪种方式,如果你使用IDLE,习惯于从命令行而不是从IDLE本身运行你的程序。 我个人觉得这在很多情况下给了我更好的反馈。 最后是PyDev IDE (基于Eclipse构建),它对其强大的内置可视化调试特别有用。 这可能是一个不错的选择,但它确实是一个重量级选项,如果您还不熟悉Eclipse,我会将其置于“中级”难度级别。 如果您熟悉Eclipse,那么PyDev就会让您感到宾至如归。
你可能在if
之前有一个类似空格的字符 - 我习惯使用TextMate时这样做,其中alt + space会插入一个非破坏空间的Unicode字符而不是常规空格。
你在文件的开头有# coding: utf-8
吗? 如果是这样,请将其删除,您可能会收到更好的错误消息。
顺便说一句,如果不使用sum
/生成表达式(这可能比学习Python的东西更有帮助),你的循环可以这样简化:
for x in range(len(Hand)):
for y in range(len(Hand)):
if Hand[x][0] == Hand[y][0] and y != x:
sameRank += 1
有时混合使用制表符和空格会使python跳起来 - 比方说,如果你的while循环缩进了标签,而if语句则使用空格。 虽然if语句现在可以正确缩进,但它仍然可以帮助检查代码段中的所有其他行,以确保它们都以相同的方式缩进。
您的编辑可以通过以下几种方式提供帮助:
\\t
,如果您的编辑器支持通过正则表达式搜索)并将它们与四个空格交换,反之亦然。 如果您的编辑器不支持这些内容,我建议尝试使用Programmer's Notepad或Notepad2 ,如果只是为了帮助诊断这些问题。
如果这听起来不合理,请欢迎编程! 这对我们最好的人来说可能是令人沮丧的。 选择您喜欢的版本(空格或制表符),并坚持使用它。 如上所述,还有很多方法可以使用Python编写一个更干净的代码,但是也应该习惯间距问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.