2012-08-14 40 views
0

我正在製作一個密碼程序,我將在後面使用不同的密碼填充,但現在我有莫爾斯碼。我還不是最好的編程,所以下面的代碼可能看起來過分並且很容易分解成更好的代碼。我在Python中製作一個'密碼程序',它發出奇怪的答案

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,它將輸出.-.-.--。這是爲什麼發生?我該如何解決它?

+0

請你的代碼修剪下來的[短,自含ed,Correct(Compilable),Example](http://sscce.org/)。 – 2012-08-14 10:04:47

+1

這可能有助於解釋你所指的「奇怪答案」究竟是什麼。無論如何,我認爲一個問題是這條線:'engtomorse = engtomorse.replace('。','。-。-.-')',因爲它將用這個字符串替換先前創建的點。在字符串有任何點之前,您可能需要這樣做。 – Digitalex 2012-08-14 10:05:57

回答

7

這將取代所有'。你已經插入。你可以嘗試這樣做更換第一

  engtomorse = engtomorse.replace('.', '.-.-.-') 
你可能希望有莫爾斯電碼字母太之間的空間

,否則他們都會一起運行

另一種方式做,這是使用字典

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

更換每個字符這樣更有效,並且將意味着您避免特定的錯誤完全

+0

或者根本不使用'replace'。 – Marcin 2012-08-14 10:11:10

+0

非常感謝!我現在覺得很愚蠢,那個錯誤就在我面前! – 2012-08-14 10:13:57

相關問題