我正在使用Python制作一个"密码程序",它会发出奇怪的答案

Rob*_*sod 0 python encryption user-input long-integer

我正在制作一个密码程序,我将在后面填充不同的密码,但现在我有摩尔斯代码.我不是最好的编程,所以下面的代码可能看起来过分,很容易分解成更好的代码.

import os

def c():
    os.system('cls')

doneOnce = False

while True:
    print 'Code Maker Breaker!'
    print '-------------------\n'
    if doneOnce == False:
        print 'Welcome to CMB!'
        print 'In CMB you can pick several types of codes,'
        print 'Then convert text into this code! If you want,'
        print 'You can then convert text back into this code!'
        print 'Use numbers to select different codes.\n'
        doneOnce = True
    print 'Codes! Please select with corresponding numbers.\n'
    print '1. Morse'
    code = raw_input('Enter the number for your code: ')
    c()
    if code == '1':
        print 'The Morse code should be used with spaces'
        print 'after every letter to avoid the wrong translation.\n'
        print '1. Translate from English to -- --- .-. ... .'
        print '2. Translate from -- --- .-. ... . to English'
        morse = raw_input('Enter what you want: ')
        c()
        if morse == '1':
            print 'Translating to Morse.'
            print 'Enter your English sentence'
            engtomorse = raw_input('>>> ').lower()
            engtomorse = engtomorse.replace('a', '.-')
            engtomorse = engtomorse.replace('b', '-...')
            engtomorse = engtomorse.replace('c', '-.-.')
            engtomorse = engtomorse.replace('d', '-..')
            engtomorse = engtomorse.replace('e', '.')
            engtomorse = engtomorse.replace('f', '..-.')
            engtomorse = engtomorse.replace('g', '--.')
            engtomorse = engtomorse.replace('h', '....')
            engtomorse = engtomorse.replace('i', '..')
            engtomorse = engtomorse.replace('j', '.---')
            engtomorse = engtomorse.replace('k', '-.-')
            engtomorse = engtomorse.replace('l', '.-..')
            engtomorse = engtomorse.replace('m', '--')
            engtomorse = engtomorse.replace('n', '-.')
            engtomorse = engtomorse.replace('o', '---')
            engtomorse = engtomorse.replace('p', '.--.')
            engtomorse = engtomorse.replace('q', '--.-')
            engtomorse = engtomorse.replace('r', '.-.')
            engtomorse = engtomorse.replace('s', '...')
            engtomorse = engtomorse.replace('t', '-')
            engtomorse = engtomorse.replace('u', '..-')
            engtomorse = engtomorse.replace('v', '...-')
            engtomorse = engtomorse.replace('w', '.--')
            engtomorse = engtomorse.replace('x', '-..-')
            engtomorse = engtomorse.replace('y', '-.--')
            engtomorse = engtomorse.replace('z', '--..')
            engtomorse = engtomorse.replace('0', '-----')
            engtomorse = engtomorse.replace('1', '.----')
            engtomorse = engtomorse.replace('2', '..---')
            engtomorse = engtomorse.replace('3', '...--')
            engtomorse = engtomorse.replace('4', '....-')
            engtomorse = engtomorse.replace('5', '.....')
            engtomorse = engtomorse.replace('6', '-....')
            engtomorse = engtomorse.replace('7', '--...')
            engtomorse = engtomorse.replace('8', '---..')
            engtomorse = engtomorse.replace('9', '----.')
            engtomorse = engtomorse.replace('.', '.-.-.-')
            engtomorse = engtomorse.replace(',', '--..--')
            engtomorse = engtomorse.replace('?', '..--..')
            engtomorse = engtomorse.replace('!', '..--.')
            engtomorse = engtomorse.replace(':', '---...')
            engtomorse = engtomorse.replace('"', '.-..-.')
            engtomorse = engtomorse.replace("'", '.----.')
            engtomorse = engtomorse.replace('=', '-...-')
            c()
            print 'Your sentence in Morse code is', engtomorse
            print 'Press enter.'
            raw_input()
        elif morse == '2':
            pass
        else:
            print 'You entered something wrong... Go back!'
            print 'Press enter.'
            raw_input()
    else:
        print 'What?'
        print 'Press enter.'
        raw_input()
    c()
Run Code Online (Sandbox Code Playgroud)

好的,这很多.但是,对我来说错误的部分是当用户输入一个句子时,程序将所有字母替换为莫尔斯代码等价物.打印完成后,我得到一个奇怪的答案.例如,如果我输入我的句子作为A,它将输出.-.-.--.为什么会这样?我该如何解决?

Joh*_*ooy 7

这将取代你已经插入的所有'.'.你可以先尝试做这个替换

            engtomorse = engtomorse.replace('.', '.-.-.-')
Run Code Online (Sandbox Code Playgroud)

你可能也希望莫尔斯代码字母之间有空格,否则它们都会一起运行

另一种方法是使用字典

replace_dict = {'a': '.-', 'b': '-...', ...}
engtomorse = " ".join(replace_dict[k] for k in engtomorse)
Run Code Online (Sandbox Code Playgroud)

替换这样的每个字符更有效,并且意味着你完全避免了这个特定的错误