Скрипт Python не обновляет переменную - PullRequest
1 голос
/ 07 июля 2019

Я пытаюсь настроить Raspberry Pi (модель B +) на выбранный пользователем светодиод через GPIO с помощью функции io.output().Однако у меня есть проблемы с получением моего сценария, чтобы сделать это.Сценарий написан на Python3.

# Set GPIO pins for each color
red = 11
yellow = 9
green = 10
# etc...

# LEDs are set as output
io.setup(red, io.OUT)
io.setup(yellow, io.OUT)
io.setup(green, io.OUT)
# etc...

# Function
def phase(color):
    io.output(color, io.HIGH)

color = input("Please choose a color like red, yellow, green, ...: ")

То, чего я пытаюсь добиться, заключается в следующем: в зависимости от выбора, который делает пользователь, этот конкретный светодиод включается.

У пользователя есть выбориз 10 цветов.

Я знаю, что это может быть достигнуто путем установки:

if color == 'red':
    io.output(red, io.HIGH)
elif color == 'yellow':
    io.output(yellow, io.HIGH)
elif color == 'green':
    io.output(green, io.HIGH)
#etc...

Но я хотел бы иметь только 1 строку кода, в которой переменная color обновляется в соответствии скакой цвет выбрал пользователь:

io.output(color, io.HIGH)

Кажется, что установка переменных в Python3 работает немного по-другому, чем я думал (я привык к PHP, но в Python3 такого еще не было).

Я ожидаю, что переменная color будет обработана Python для ввода данных пользователем (скажем, «красным»), который впоследствии должен быть обработан в соответствующий номер вывода GPIO, который равен 11.

Однако этого не происходит, и я не могу понять, почему.Я продолжаю получать сообщения о том, что color должно быть целым числом.И я думал, что переменные в этом случае работают как color = red = 11.

Как передать переменную в мою io.output() функцию?Это возможно, или я застрял с необходимостью написать строку кода для каждого цветного светодиода?Это кажется мне излишним, но, может быть, я здесь совершенно не прав.

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Вы можете использовать словарь для преобразования строки в целое число

all_colors = {
    "red": 11,
    "yellow": 9,
    "green": 10
}

color = input("Please choose a color like red, yellow, green, ...: ")
color = color.lower().strip()

if color in all_colors:
    value = all_colors[color]
    io.output( value, io.HIGH )
else:
    print("unknown color")
1 голос
/ 07 июля 2019

Ваша переменная color содержит строку. Вы, кажется, хотите каким-то образом отобразить эту строку в целое число. словарь (dict) был бы идеальным для этого и позволил бы также некоторые другие оптимизации:

# Set GPIO pins for each color
colors = {
    'red': 11,
    'yellow': 9,
    'green': 10,
    # etc...
}

# LEDs are set as output
[io.setup(v, io.OUT) for k,v in colors]

# Function
def phase(color):
    io.output(colors[color], io.HIGH)

color = input("Please choose red, yellow or green: ")
phase(color)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...