Код Морзе Python 3: вместо того, чтобы использовать несколько операторов if для каждого возможного слова, которое может ввести пользователь, как мне сделать цикл для этого? - PullRequest
0 голосов
/ 19 мая 2018

Я сделал программу Raspberry Pi с азбукой Морзе:
Как мне упростить операторы if: я хочу сделать так, чтобы программа воспроизводила все, что вводит пользователь, но я не знаю, как сделать это с несколькими ifзаявления.Помогите, пожалуйста!!Я хочу, чтобы программа могла воспроизводить любое слово, введенное пользователем, но я не знаю, как это сделать.Если мне нужно назначить переменную каждому letgter, как мне это сделать?

import RPi.GPIO as GPIO

from time import sleep


LED_GPIO = 4

print("Getting ready...")

GPIO.setmode(GPIO.BCM)

GPIO.setup(LED_GPIO, GPIO.OUT)



def lighton(timeon):

    print ("Light On - " , timeon)

    GPIO.output(LED_GPIO, True)
    sleep(timeon)
    GPIO.output(LED_GPIO, False)
    sleep(timeoff)



dashtime = .5
dottime = .25
timeoff = .1

x = 1 

while x > 0:

    let = input("Enter a letter or * to quit")

    if let == "*":
        x=0

    elif let == "s":       
        lighton(dottime)    
        lighton(dottime) 
        lighton(dottime)

    elif let == "o":
        lighton(dashtime)
        lighton(dashtime)
        lighton(dashtime)

    elif let == "sos":

        lighton(s)

        lighton(dashtime)
        lighton(dashtime)
        lighton(dashtime)       

        lighton(dottime)    
        lighton(dottime) 
        lighton(dottime)        

    else: print ("Letter not recognized - try again")


GPIO.cleanup()

print("Bye Bye")   

1 Ответ

0 голосов
/ 19 мая 2018

Вместо if используйте словарь для поиска шаблона вспышки для каждого символа.Вы можете сделать это в два этапа: диктовку, которая преобразует букву в азбуку Морзе, и другую, которая знает, как перевести это во флэш-длину.

import RPi.GPIO as GPIO    
from time import sleep

print("Getting ready...")

LED_GPIO = 4
GPIO.setmode(GPIO.BCM)    
GPIO.setup(LED_GPIO, GPIO.OUT)

def lighton(timeon):    
    print ("Light On - " , timeon)    
    GPIO.output(LED_GPIO, True)
    sleep(timeon)
    GPIO.output(LED_GPIO, False)
    sleep(timeoff)

# light on/off times
dashtime = .5
dottime = .25
timeoff = .1

# ascii to morse translation
morse_letters = { "S":"...", "O":"---" } # fill in the rest!

# morse to time translation
morse_to_time = { ".":dottime, "-":dashtime }

while True:
    # get a line from the user... and uppercase because morse
    # doesn't do lower
    text = input("Enter text or * to quit").uuper()
    if text == "*":
        break
    # step through each character in text 
    for character in text:
        # get the morse pattern for the character then flash
        # the light for each dash or dot
        for dashdot in morse_letters.get(character, ""):
            lighton(morse_to_time[dashdot])

GPIO.cleanup()

print("Bye Bye")   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...