le traducteur python vers morse se brise à mi-chemin

Nov 23 2020

En tant que pratique en python, j'ai essayé de créer un traducteur de texte en morse. mais il se brise après avoir exécuté une seule fois. Pouvez-vous m'aider à résoudre le problème? (C'est probablement dans la fonction morse) La fonction beepest pour le son, le dictionnaire item_listest un paquet de code spécial de chaque caractère.

import winsound
import time
def beep(char):
    if char == 'a':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'b':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'c':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'd':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'e':
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'f':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'g':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'h':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'i':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'j':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'k':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'l':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'm':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'n':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'o':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'p':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 'q':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'r':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 's':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == 't':
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'u':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'v':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'w':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'x':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'y':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == 'z':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '1':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '2':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '3':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '4':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '5':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '6':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '7':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '8':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '9':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == '0':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '.':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '-':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '/':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == ',':
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
    elif char == '?':
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 500)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
        winsound.Beep(500, 150)
        time.sleep(150)
    elif char == ' ':
        print("\t")
    else:
        print("unknown")
        winsound.Beep(500, 1000)
        time.sleep(150)


item_dict = {
    'a': '.- ',
    'b': '-... ',
    'c': '-.-. ',
    'd': '-.. ',
    'e': '. ',
    'f': '..-. ',
    'g': '--. ',
    'h': '.... ',
    'i': '.. ',
    'j': '.--- ',
    'k': '-.- ',
    'l': '.-.. ',
    'm': '-- ',
    'n': '-. ',
    'o': '--- ',
    'p': '.--. ',
    'q': '--.- ',
    'r': '.-. ',
    's': '... ',
    't': '- ',
    'u': '..- ',
    'v': '...- ',
    'w': '.-- ',
    'x': '-..- ',
    'y': '-.-- ',
    'z': '--.. ',
    '0': '----- ',
    '1': '.---- ',
    '2': '..--- ',
    '3': '...-- ',
    '4': '....- ',
    '5': '..... ',
    '6': '-.... ',
    '7': '--... ',
    '8': '---.. ',
    '9': '----. ',
    ' ': '\t',
    '.': '.-.-.- ',
    ',': '--..-- ',
    '?': '..--.. ',
    '-': '-...- ',
    '/': '-..-. '
}


def morse():
    x = input("?")
    name_list = list(x)
    for x in name_list:
        print(item_dict[f"{x}"])
        beep(x)
    morse()


print('''text to morse-text
    enter the text you want''')


morse()

Réponses

2 ReblochonMasque Nov 23 2020 at 08:51

D'après les commentaires, il devrait être sleep(.15)

Ensuite, votre beepfonction est trop "pénible" à regarder, voici une suggestion:

import winsound
import time


def beep(char):
    """translates a char into morse-code dashes and dots, and beeps them"""
    sound = {'-': 500, '.': 150, ' ': 10}
    for dashdot in item_dict.get(char, ' '):
        if dashdot == '\t':
            dashdot = ' '
#         print(f'{dashdot}', end='')
        winsound.Beep(500, sound[dashdot])
        time.sleep(.15)
#     print(' ', end='')


item_dict = {
    'a': '.- ',
    'b': '-... ',
    'c': '-.-. ',
    'd': '-.. ',
    'e': '. ',
    'f': '..-. ',
    'g': '--. ',
    'h': '.... ',
    'i': '.. ',
    'j': '.--- ',
    'k': '-.- ',
    'l': '.-.. ',
    'm': '-- ',
    'n': '-. ',
    'o': '--- ',
    'p': '.--. ',
    'q': '--.- ',
    'r': '.-. ',
    's': '... ',
    't': '- ',
    'u': '..- ',
    'v': '...- ',
    'w': '.-- ',
    'x': '-..- ',
    'y': '-.-- ',
    'z': '--.. ',
    '0': '----- ',
    '1': '.---- ',
    '2': '..--- ',
    '3': '...-- ',
    '4': '....- ',
    '5': '..... ',
    '6': '-.... ',
    '7': '--... ',
    '8': '---.. ',
    '9': '----. ',
    ' ': '\t',
    '.': '.-.-.- ',
    ',': '--..-- ',
    '?': '..--.. ',
    '-': '-...- ',
    '/': '-..-. '
}


def morse():
    x = input()
    # x = item_dict.keys()
    name_list = list(x)
    for c in x:
        beep(c)

print('''text to morse-text
    enter the text you want''')

morse()

sortie de débogage:

.-  -...  -.-.  -..  .  ..-.  --.  ....  ..  .---  -.-  .-..  --  -.  ---  .--.  --.-  .-.  ...  -  ..-  ...-  .--  -..-  -.--  --..  -----  .----  ..---  ...--  ....-  .....  -....  --...  ---..  ----.    .-.-.-  --..--  ..--..  -...-  -..-.