为什么会出现这些错误?

时间:2021-05-24 20:26:26

标签: python

这是一个将字符串加密为简单密文的简单程序,但我不断收到错误消息。有人能找出我的错误吗?下面附上代码和错误信息。

def main():
    message = prep_plaintext(plaintext)
    rails = build_rails(message)
    encrypt(rails)

def prep_plaintext(plaintext):
    message = "".join(plaintext.split())
    message = message.upper()
    print("\nplaintext = {}".format(plaintext))
    return message

def build_rails(message):
    evens = message[::2]
    odds = message[1::2]
    rails = evens + odds
    return rails

def encrypt(rails):
    ciphertext = ' '.join([rails[i:i+5] for i in range(0, len(rails), 5)])
    print("ciphertext = {}".format(ciphertext))

if __name__ == '__main__':
    main()

Traceback (most recent call last):
  File "/Users/bennettsullivan/Documents/Encrypt.py", line 23, in <module>
    main()
  File "/Users/bennettsullivan/Documents/Encrypt.py", line 2, in main
    message = prep_plaintext(plaintext)
NameError: name 'plaintext' is not defined

3 个答案:

答案 0 :(得分:3)

问题在于主函数中的变量 plaintext 未声明。由于这个原因,这段代码引发了一个错误。

您可以修复例如像这样修改您的代码:

def main():
    plaintext = ""  # put here a value
    message = prep_plaintext(plaintext)
    rails = build_rails(message)
    encrypt(rails)

答案 1 :(得分:0)

这一行是原因,变量plaintext没有在main()中定义

    message = prep_plaintext(plaintext)

也许试试message = prep_plaintext(input('plaintext: ')) 或更改

def main():

def main(plaintext):

并给main()

一个参数

答案 2 :(得分:0)

问题

message = prep_plaintext(plaintext)中,变量plaintext没有定义

解决方案

  1. 在方法中定义变量

    def main():
        plaintext = "password"
        message = prep_plaintext(plaintext)
    
  2. 将其作为参数传递

    def main(plaintext):
        message = prep_plaintext(plaintext)
    
    main("password")
    

通过用户输入进行改进

您也可以将 "password" 替换为 input("Please enter a value to encrypt: ") 以在代码执行时在控制台中写入一个字