尝试不在 Python 中使用 'ord()' 转换空格

  • 本文关键字:ord 空格 转换 Python python
  • 更新时间 :
  • 英文 :


所以我试着写代码,将文本文件转换成数字,然后添加一个偏移因子,以改变以后转换成ASCII时的字母-一切都工作得很好,直到我不得不使用' word (x)'将空格转换成数字

代码如下:

def TextFileEncyption(OFkey, Str):
    '''This will convert the text file that the user inputted earlier, using the offset factor to do so'''
    Message = ""
    print("The program is now going to encrypt your chosen text file...")
    for x in Str:
        if x == 32:
            pass
        else:
            number = ord(x)
        newNumber = number+OFkey
        if newNumber > 126:
            newNumber = newNumber - 94
        ASCIIletter = chr(newNumber)
        Message += ASCIIletter
    print(Message)

我已经尝试过代码为'If x == space'(其中空间是space = " "的变量),和代码如'If x == " "'

我怎样才能最好地解决这个问题?由于

问题是您希望保留空格,但通过旋转它们的偏移量来加密所有其他字符吗?

类似:

def TextFileEncyption(offset, txt):
    '''This will convert the text file that the user inputted earlier, 
       using the offset factor to do so'''
    Message = ""
    print("The program is now going to encrypt your chosen text file...")
    # go through each character in the input text
    for char in txt:
        number = ord(char)
        # ...and only modify characters that are *not* a space character
        if number != 32:
            number = number + offset
            if number > 126:
                number -= 94
        # ...then convert the value back into a character
        ASCIIletter = chr(number)
        # and append it to the message variable for output.
        Message += ASCIIletter
    print(Message)

if __name__ == "__main__":
    import sys
    inText = "This is a test of the function."
    if len(sys.argv) > 1:
        inText = sys.argv[1]
    TextFileEncyption(10, inText)

给出如下输出:

bgporter@Ornette ~/temp:python soEncrypt.py "A test of the encryption function."
The program is now going to encrypt your chosen text file...
K ~o}~ yp ~ro oxm|%z~syx p!xm~syx8

你必须使用:

if x == ' ':

但是算法有个问题。如果您的Str参数以空格开头会怎样?您的number变量在第一次传递时未定义。

正如dlask所说,您可以使用if x == ' '。你已经试过了。我相信你的问题实际上不在那个领域。当你有一个空格时,你可以跳过第一个if/else语句。

    newNumber = number+OFkey
    if newNumber > 126:
        newNumber = newNumber - 94
    ASCIIletter = chr(newNumber)
    Message += ASCIIletter

但是,'number'仍然是从前一个字母开始设置的,这最终导致空格前的字符重复。下面的代码将输入为空格时加密的字母设置为空格。这就是你想要的吗?

for x in Str:
    if x == ' ':
        ASCIIletter = ' '
        pass
    else:
        number = ord(x)
        newNumber = number+OFkey
        if newNumber > 126:
            newNumber = newNumber - 94
        ASCIIletter = chr(newNumber)
    Message += ASCIIletter
print(Message)

最新更新