Python脚本不会更新变量

时间:2019-07-07 00:45:58

标签: python python-3.x variables

我正在尝试通过io.output()函数通过GPIO使用户选择的LED上的Raspberry Pi(B +型)开关。但是我很难让我的脚本这样做。该脚本是用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, ...: ")

我要实现的目标是:根据用户的选择,打开特定的LED。

用户可以选择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。 / p>

但是那没有发生,我不知道为什么。我不断收到错误消息,告诉我color应该是整数。而且我认为在这种情况下,变量的工作方式类似于color = red = 11

如何在io.output()函数中传递变量?可能吗?还是我不得不为每个彩色LED编写一行代码?这对我来说似乎很多余,但也许我在这里完全错了。

2 个答案:

答案 0 :(得分:1)

您的变量color包含一个字符串。您似乎想要某种方式将该字符串映射为整数。一个dictionarydict)会很完美,并且还允许其他一些优化:

# 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)

答案 1 :(得分:1)

您可以使用字典将字符串转换为整数

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")