繁体   English   中英

由于Python中有几个顶级函数而导致语法错误?

[英]syntax error due to several top-level functions in Python?

尝试在python中定义多个函数时搜索并在此处发现一个非常类似的问题语法错误?

但问题并未得到真正的回答

我在第二个“ def”处收到语法错误。 我的缩进可能在这里弄乱了,因为我无法弄清这里的格式...。但是在我的程序中它是正确的,缩进不是问题。

def encryptChar(ch, key):
    newOrd = ord(ch) + key % 26
    if ord(ch) < 65:
        newOrd = ord(ch)
    elif ord(ch) < 91:
        if newOrd > 90:
            newOrd = newOrd - 26
        elif newOrd > 122:
            newOrd = newOrd - 26
    newch = chr(newOrd)
    return newch

def encryptString(string, key):
    newString = ""
    for i in range(len(string)):
         newString += encryptChar(string[i], key)
    return newString

def decryptString(string, key):
    newString = ""
    for i in range(len(string)):
         newString += encryptChar(string[i], -1*key)
    return newString

我正在猜测,这与所有功能都处于顶层有关。 但是我该如何解决? 这是Python 2.7。 (我可以将top函数包含在其他2个函数中,但是我仍然剩下2个顶层函数)

谢谢你的帮助!

修复缩进错误后,我就可以毫无问题地运行您的代码:

def encryptString(string, key):
   newString = ""
   for i in range(len(string)):
        newString += encryptChar(string[i], key)
   return newString    # << HERE

演示: http//codepad.org/eaaiHUJZ

我还将按照以下方式重写您的代码:

# because encryption is misnomer here
def rotateChar(ch, key):
    if 'a' <= ch < 'z':
        newOrd = (ord(ch) - ord('a') + key) % 26
        return chr(newOrd + ord('a'))
    elif 'A' < ch < 'Z':
        newOrd = (ord(ch) - ord('A') + key) % 26
        return chr(newOrd + ord('A'))
    else:
        return ch

def rotateString(st, key):
   return ''.join(rotateChar(c, key) for c in st)

def derotateString(st, key):
   return ''.join(rotateChar(c, -key) for c in st)

演示: Python 3Python 2

最后,我强烈建议您不要将这种“加密”用于需要真正安全性的任何内容。

错误消息确切说明了错误所在:

  File "test.py", line 17
    return newString
                   ^
IndentationError: unindent does not match any outer indentation level

return newString的行上,缩进级别与for i in range(len(string))行中for i in range(len(string))的先前缩进级别不匹配。

您需要整体修复缩进-在所有代码中使用恒定的缩进级别(例如2或4个空格)。 始终如一。 现在,您的缩进无处不在–每次缩进时,缩进到一个不同的水平。

其次,不要将名称string用于变量。 string也是标准Python模块的名称,因此您将无法在代码中使用该模块,并且会混淆其他人阅读您的代码(也不要使用str ,因为这是内置名称功能)。

在您的函数开始时没有出现语法错误,但在它的结尾...

def encryptString(string, key):
   newString = ""
   for i in range(len(string)):
        newString += encryptChar(string[i], key)
    return newString 

您的return语句比该函数的其余部分缩进一个空格,从而导致IndentationError。

如果您确定错误出现在代码的开头,则还有另一种可能性。 堆栈溢出会自动将制表符转换为您发布的代码中的空格。 如果您混合使用制表符和空格,则可能是创建了一个缩进错误,您看不到它。 如果您不想尝试手动修复它,则大多数文本编辑器都将具有为您提供标签的功能,即您可以用空格替换选项卡,或者您也可以将代码从帖子中复制回程序。

问题是return newString的缩进级别为4个字符,该缩进级别与该级别的前一行3个字符不匹配。 尝试使用可以让您轻松地始终键入4空格制表符的编辑器; 如果您必须手工整理所有内容并不断遇到此类错误,那么编写Python将会非常痛苦。

我不知道这是否是复制和粘贴错误,但是您的缩进有点混乱。 尝试使用我的,看看是否有相同的问题:

def encryptChar(ch, key):
    newOrd = ord(ch) + key % 26
    if ord(ch) < 65:
        newOrd = ord(ch)
    elif ord(ch) < 91:
        if newOrd > 90:
            newOrd = newOrd - 26
    elif newOrd > 122:
        newOrd = newOrd - 26
    newch = chr(newOrd)
    return newch

def encryptString(string, key):
    newString = ""
    for i in range(len(string)):
        newString += encryptChar(string[i], key)
    return newString

def decryptString(string, key):
    newString = ""
    for i in range(len(string)):
        newString += encryptChar(string[i], -1*key)
    return newString

您收到的错误信息是什么? 您的函数名称不应该冲突。 我的猜测是, return之前的多余空间给您带来了问题,但是这将有助于查看错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM