Python中的几个顶级函数导致语法错误?

Python中的几个顶级函数导致语法错误?,python,function,syntax,Python,Function,Syntax,我在这里搜索并发现了一个非常类似的问题 但这个问题并没有得到真正的回答 我在第二个def出现语法错误。我的缩进在这里可能会搞砸,因为我无法理解这里的格式…但在我的程序中它是正确的,缩进不是问题所在 def encryptChar(ch, key): newOrd = ord(ch) + key % 26 if ord(ch) < 65: newOrd = ord(ch) elif ord(ch) < 91: if newOrd

我在这里搜索并发现了一个非常类似的问题

但这个问题并没有得到真正的回答

我在第二个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
我猜这与所有顶级功能有关。但我该如何修复它呢?这是Python2.7。我可以在其他2个函数中包含top函数,但我仍然剩下2个top-level


谢谢你的帮助

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

def encryptString(string, key):
   newString = ""
   for i in range(len(string)):
        newString += encryptChar(string[i], key)
   return newString    # << HERE
演示: 我还将重写您的代码,如下所示:

# 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)
演示:,
最后,我强烈建议不要对任何需要真正安全性的东西使用这种加密。

您收到的错误文本是什么?你的函数名不应该冲突。我的猜测是,返回前的额外空间会给您带来问题,但查看错误会有所帮助。

我在函数开始时没有遇到语法错误,但在函数结束时

def encryptString(string, key):
   newString = ""
   for i in range(len(string)):
        newString += encryptChar(string[i], key)
    return newString 
return语句比函数的其余部分缩进一个空格,导致缩进错误


如果您确定错误在代码的开头,那么还有另一种可能性。堆栈溢出会自动将您发布的代码中的制表符转换为空格。如果您混合使用制表符和空格,则可能创建了您看不见的缩进错误。如果您不想尝试手动修复,大多数文本编辑器都有一个功能,可以用空格替换制表符,或者您只需将文章中的代码复制回程序中即可。

错误消息准确地说明了问题所在:

  File "test.py", line 17
    return newString
                   ^
IndentationError: unindent does not match any outer indentation level
在returnnewString行上,缩进级别与rangelenstring行中for i的上一缩进级别不匹配

您需要在整个代码中使用一个恒定的缩进级别,例如2或4个空格来固定缩进。保持一致。现在,你的缩进到处都是,每次你缩进的时候,它是到了一个不同的层次


其次,不要对变量使用名称字符串。string也是标准Python模块的名称,因此您将无法在代码中使用该模块,并且您将混淆阅读您的代码的其他人也不使用str,因为这是一个内置函数的名称。

问题在于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

您收到的错误消息的文本是什么?我没有收到任何错误。你到底得到了什么?这不是缩进问题。如果是,您将得到一个缩进错误,而不是语法错误。没有人能够重现您的问题,所以请再次检查您是否实际使用了您在此处发布的代码。新的…字符串函数当然是为新手准备的。哦,伙计,缩进全搞糟了,因为我不知道如何在消息框中发布代码。。。我仍然得到错误,有固定的缩进。错误为SyntaxError:语法无效,并突出显示第二个def。谢谢其他建议@user990678你试过我的演示吗?@user990678它在Python3上也很好用。您可以复制并粘贴整个错误吗?SyntaxError:整个错误是无效语法。它突出显示了第二个迪福人,缩进全搞乱了,因为我不知道如何在消息框中发布代码。。。我仍然得到错误,有固定的缩进。错误是SyntaxError:语法无效,它突出显示了第二个def。噢,伙计,缩进全搞糟了,因为我不知道如何在消息框中发布代码。。。我仍然得到错误,有固定的缩进。错误为SyntaxError:语法无效,并突出显示第二个def。