我有一个RGB LED连接到Raspberry Pi 3与下面的代码。我要做的是向用户提供一个问题,以选择红色、绿色或蓝色,对应于链接到特定GPIO引脚的变量。
当用户进入,红色,发光二极管将变成红色。当他们进入蓝色,发光二极管将变成蓝色。
目前,如果我输入红色,代码将打印' 20‘(整数),这对应于BCM引脚20。这是很好的,但我的问题是,我有困难的转换用户的字符串响应为小写先。(即将红色转换为红色)。
我收到了一个错误:
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:任何帮助都将不胜感激。
发布于 2016-07-18 19:42:02
这不是Python3。Python的3“输入”将返回一个字符串,然后您可以将该字符串转换为小写--但是您的代码中没有任何内容,给定一个具有颜色名称的string,检索与具有相同名称的变量关联的cotnents。
另一方面,Python2的输入在返回结果之前执行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:
...https://stackoverflow.com/questions/38426531
复制相似问题