Python 3.6 Строковый ввод - PullRequest
       6

Python 3.6 Строковый ввод

0 голосов
/ 23 декабря 2018

Я использую Raspberry Pi 3 и управляю тремя светодиодами с помощью Python.Я мог бы сказать, что я хорош с Python.Вот мой код:

import RPi.GPIO as GPIO
import time

#GPIO Pins
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)

def led(color,state):
    if state == "on":
        if color == "g": #green
            GPIO.output(27,GPIO.HIGH)
        elif color == "y": #yellow
            GPIO.output(22,GPIO.HIGH)
        elif color == "r": #red
            GPIO.output(17,GPIO.HIGH)
        print ("LED on")
    elif state == "off":
        if color == "g":
            GPIO.output(27,GPIO.LOW)
        elif color == "y":
            GPIO.output(22,GPIO.LOW)
        elif color == "r":
            GPIO.output(17,GPIO.LOW)
        print ("LED off")

while True:
    leds_col = input("Color (r, g, y): ")
    leds_stat = input("On or Off: ")
    led(leds_col, leds_stat)

У меня есть функция с именем led(), которая принимает два аргумента: color (g, y или r) и state (вкл или выкл).В цикле while leds_col запрашивает цвет в консоли, а leds_stat - статус.Теперь я пытаюсь добиться того, чтобы не запрашивать цвет в другой строке и статус светодиода в другой строке, а объединить их два.Так, например, я бы написал на консоли:

g, on

И он включил бы зеленый светодиод.Я знаю, что могу просто использовать оператор if, например: if led_input == "g, on": GPIO.output(27,GPIO.HIGH) Но я уверен, что есть лучший способ сделать это.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Этот подход может помочь.Взяв два ввода с пробелом между ними.Вы можете разделить ввод на основе пробела или любого другого символа.Затем он поместит цвет и состояние в две разные переменные.

>>> leds_col,leds_stat = input('Color(r,g,y) and State(on,off):').split(' ')
Color(r,g,y) and State(on,off):g on
>>> print(leds_col)
g
>>> print(leds_stat)
on
>>> 

Кроме того, вы также можете использовать запятую или любой другой символ в качестве разделителя между цветом и состоянием.

0 голосов
/ 23 декабря 2018

str.split() сможет разделить ваш однострочный вход на две (или более) переменные:

>>> inp = input()
1,2
>>> inp
'1,2'
>>> a, b = inp.split(',')
>>> a
'1'
>>> b
'2'
0 голосов
/ 23 декабря 2018

Использовать string.split () :

while True: 
    what = input("Color [r,g,y] and state [on,off] (ex.: 'r on'): ").strip().lower().split()
    if len(what)==2:
        leds_col,leds_stat = what
        # sort the color input to reduce possible values
        leds_col = ''.join(sorted(leds_col))
        if leds_col not in "r g y gr ry gy gry" or leds_stat not in "on off":
            continue
    else:
        continue
    led(leds_col, leds_stat)

Если задан неверный ввод, будет continue запрашивать, пока ввод действителен.См. Запросы пользователей на ввод, пока они не дадут действительный ответ , чтобы получить больше идей по проверке ввода.


Не связано, но вы можете оптимизировать свою led -функцию:

def led(color,state):
    d = {"on":GPIO.HIGH, "off":GPIO.LOW,
         "g":27, "y":22, "r":17}

    for c in color:
        GPIO.output(d[c],d[state])
    print("LED",color,state)

с помощью поискового словаря: см. dict ()

...