首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数不将Raspberry Pi的python 3脚本中的输入转换为小写。

函数不将Raspberry Pi的python 3脚本中的输入转换为小写。
EN

Stack Overflow用户
提问于 2016-07-17 22:29:07
回答 1查看 2.1K关注 0票数 1

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

当用户进入,红色,发光二极管将变成红色。当他们进入蓝色,发光二极管将变成蓝色。

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

我收到了一个错误:

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

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

代码语言:javascript
复制
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:

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 19:42:02

这不是Python3。Python的3“输入”将返回一个字符串,然后您可以将该字符串转换为小写--但是您的代码中没有任何内容,给定一个具有颜色名称的string,检索与具有相同名称的变量关联的cotnents。

另一方面,Python2的输入在返回结果之前执行eval,运行用户作为Python表达式输入的任何内容。因此,当用户在red中键入时,它将为您提供关联值20。(降低对此值的调用将失败)。

您必须做的是:编写将在Python2或Python3中工作的代码,第二,创建一个一致的机制来检索给定用户类型的字符串的颜色。对于最后一部分,推荐的方法是使用字典映射将您的颜色名称和值关联起来,而不是直接作为变量。

所以:

代码语言:javascript
复制
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:
        ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38426531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档