python 3 脚本中的 lower() 函数未将输入转换为小写 Raspberry Pi

lower() function not converting input to lowercase in python 3 script for Raspberry Pi

我使用以下代码将 RGB LED 连接到 Raspberry Pi 3。我想要做的是向用户提出一个问题,让他们选择红色、绿色或蓝色,对应于链接到特定 GPIO 引脚的变量。

当用户输入Red时,LED会变成红色。当他们输入蓝色时,LED 将变为蓝色。

目前,如果我输入红色,代码将打印“20”(整数),它对应于 BCM 引脚 20。这很好,但我的问题是我无法将用户的字符串响应转换为小写优先。 (即,将 RED 转换为红色)

我收到一个错误:

request =  input("Choose a color. Red/Green/Blue".lower())
File "<string>", line 1, in <module>
NameError: name 'Red' is not defined

下面的代码是最简单的形式,首先测试我可以从用户那里获得小写输入。

red = 20
green = 16
blue = 21

try:
    while True:
        # I would like to convert user's answer (Red, Green,Blue) to a lowercase answer (ie. red, green blue)
        request =  input("Choose a color. Red/Green/Blue").lower()

        print(type(request))
        print(request)

except KeyboardInterrupt:

如有任何帮助,我们将不胜感激。

这不是 Python3。 Python's 3 "input" 会 return 你一个字符串,然后你可以将其转换为小写 - 但你的代码没有任何内容,给定一个 string颜色名称,检索与具有相同名称的变量关联的内容。

另一方面,

Python 2 的输入执行 eval、运行,无论用户输入什么 Python 表达式,在 [=30= 之前] 结果。因此,当用户输入 red 时,它会给你相关的值 20。 (并且对此值的较低调用将失败)。

你要做的是: 编写将在 Python2 或 Python3 中工作的代码,其次,建立一个一致的机制来检索给定用户键入的字符串的颜色。对于最后一部分,推荐的方法是使用字典映射来关联颜色名称和值,而不是直接作为变量。

所以:

try:
   input = raw_input 
except NameError: 
   pass

colors = dict(
    red = 20,
    green = 16,
    blue = 21,
)

try:
    while True:
        request =  input("Choose a color. Red/Green/Blue")
        color = colors[request.lower()]
        ...
    except NameError:
        print("Invalid color name selected")
    except KeyboardInterrupt:
        ...