Python if语句的主循环工作不正常
代码: 怎么了? 当我打开一个看起来像Python if语句的主循环工作不正常,python,python-3.x,Python,Python 3.x,代码: 怎么了? 当我打开一个看起来像 def nChar(nc): grid = len(nc) chars = set() for line in nc: line = set(line) if len(line) != grid or len(chars) != grid: return False return True 它应该很好,因为它是一个nxn平方(gridValidation),并且有n个
def nChar(nc):
grid = len(nc)
chars = set()
for line in nc:
line = set(line)
if len(line) != grid or len(chars) != grid:
return False
return True
它应该很好,因为它是一个nxn平方(gridValidation),并且有n个不同的字符(nChar-代码中的问题)
对于网格验证,我使用
ABC
BCA
CAB
这很好
对于nChar,我使用的是:
except ValueError: print("error")
如果我输入文件名示例:ABC,它会不断重复“输入文件名”。它与def nChar或我在主循环中使用它的方式有关
一个没有n x n的文件的示例:
if not nChar(latinsq):
print ("File does not have n different characters.")
break
else:
continue
没有n个不同字符的示例文件
ABC
BCA
CAB
D
^有4个不同的字符,但它是3x3
我希望有人能解释我做错了什么,这样我就可以了解我做错了什么,也可以解决问题
泰
编辑:
我通读了我的帖子,但没有任何意义
问题是,当我执行代码并输入文件名时,它一直在说“输入文件名”。您的第一个问题是说
否则:如果不是nChar(拉丁SQ):
块,请继续。如果你达到了这一点,要么正方形是错的,你打破了,要么正方形是对的,你没有。您应该将if
块更改为使用continue
,然后一起删除else
块。第二个问题是nChar()
没有返回正确的内容。它总是检查行中的唯一字符数是否大于行数,但看不到总字符数是否过多。您可以通过以下方式进行检查:
ABD
BCA
CAB
它还印什么吗?也就是说,是否打印了任何错误消息?@zondo nope。除了“输入文件名:”之外,它不会反复打印任何其他内容。如果我删除“else:continue”,它将运行程序。@zondo但nChar不工作:SI会认为此代码会因缩进错误而崩溃,因为除FileNotFoundError之外的与其伴随的try
不一致。和下方的打印
不对齐。请确认此处显示的代码与您正在运行的代码完全相同。好的,谢谢。阅读您编写的代码时,这会更有意义。也很高兴了解联盟…谢谢zondo!p、 它现在可以工作了chars=set()的用途是什么?它是空的吗?我在我的代码中包含了这一点,如果我是诚实的,我没有真正理解if语句,这听起来可能很奇怪,但感觉像是在欺骗自己:S.当我说line=set(line)
时,我正在删除line
中的所有重复项。这样,当我检查len(line)!=具有AAB
的网格将不起作用。它需要有那么多独特的字母。我说chars=chars.union(line)
,因为如果line
有任何chars
没有的字母,那么会将这些字母添加到chars
。如果这使得chars
的字母过多,它将无法通过If
测试。我从chars=set()
开始,这样当我将第一行添加到chars
时,我们实际上知道我们正在处理哪些字母。我不确定这是否清楚,但如果不清楚,我仍然在附近。
def nChar(nc):
grid = len(nc)
chars = set()
for line in nc:
line = set(line)
chars = chars.union(line)
if len(line) != grid or len(chars) != grid:
return False
return True