Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python if语句的主循环工作不正常_Python_Python 3.x - Fatal编程技术网

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