繁体   English   中英

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

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

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

当用户输入红色时,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的3个“输入”将返回一个字符串,然后可以将其转换为小写字母-但是在给定颜色名称的string ,代码中没有任何内容,因此可以检索与具有相同名称的变量相关联的cotnent。

另一方面,Python 2的输入执行eval ,然后在返回结果之前运行用户以Python表达式键入的内容。 因此,当用户键入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:
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM