我正在做一个';密码程序';在Python中,它会给出奇怪的答案

我正在做一个';密码程序';在Python中,它会给出奇怪的答案,python,user-input,long-integer,encryption,Python,User Input,Long Integer,Encryption,我正在制作一个密码程序,稍后我将用不同的密码填充它,但现在我有摩尔斯电码。我还不是最擅长编程的,所以下面的代码可能看起来太多了,很容易分解成更好的代码 import os def c(): os.system('cls') doneOnce = False while True: print 'Code Maker Breaker!' print '-------------------\n' if doneOnce == False: pr

我正在制作一个密码程序,稍后我将用不同的密码填充它,但现在我有摩尔斯电码。我还不是最擅长编程的,所以下面的代码可能看起来太多了,很容易分解成更好的代码

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()

好吧,那就太多了。但是对于我来说,出错的部分是当用户输入一个句子时,程序会用摩尔斯电码替换所有的字母。一旦打印出来,我会得到一个奇怪的答案。例如,如果我将我的句子输入为A,它将输出
-.-.-.-
。为什么会这样?如何修复它?

这将替换您已插入的所有“.”。你可以先做这个替换

            engtomorse = engtomorse.replace('.', '.-.-.-')
你可能也希望摩尔斯电码字母之间有空格,否则它们会一起运行

另一种方法是使用字典

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

这样替换每个字符效率更高,这意味着您完全避免了该特定错误

请将您的代码缩减为a。这可能有助于解释您所指的“奇怪答案”实际上是什么。无论如何,我认为一个问题是这一行:
engtomorse=engtomorse.replace('.','.-.-.-.-')
,因为它将用这个字符串替换以前创建的点。您可能希望在字符串有任何点之前执行此操作。或者根本不使用
replace
。非常感谢!我现在觉得自己很愚蠢,那个错误就在我面前!