我有一个使用以下代码连接到Raspberry Pi 3的RGB LED。我想要做的是向用户提出一个问题,以选择红色,绿色或蓝色,这与链接到特定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
颜色名称,该名称与变量名称相关联。
另一方面,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:
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句