【问题标题】:Python getting user input and comparing input to stringPython获取用户输入并将输入与字符串进行比较
【发布时间】:2015-12-28 08:47:44
【问题描述】:

我正在编写一个程序,用户可以在其中选择一种颜色并使用 Raspberry Pi 点亮所述颜色的 LED。在接受用户输入并尝试将其与颜色进行比较后,我得到“NameError:名称'红色'未定义”。我该如何解决这个问题?

这是我的代码:

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

#use raspberry pi board numbers
GPIO.setmode(GPIO.BOARD)  

#GPIO output channel
GPIO.setup(7, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(32, GPIO.OUT)
GPIO.setup(37, GPIO.OUT)
GPIO.setup(40, GPIO.OUT)
GPIO.setup(33, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)

#get led color
ledColorList = input("What color of light do you want to turn on? Red, green, blue, yellow, or all").split(' ')

#blink function
def blink(pin):
    GPIO.output(pin,1)
    time.sleep(.25)
    GPIO.output(pin,0)
    time.sleep(.25)
    return

if ledColorList[0] == RED:
    blink(7)  

#turn off all pins
GPIO.cleanup()

【问题讨论】:

  • 这不是字符串的比较:如果 ledColorList[0] == RED 不要忘记 "" 它应该是这样的:如果 ledColorList[0] == "RED"

标签: python raspberry-pi user-input led


【解决方案1】:

我认为您最好将输入强制为小写并通过 raw_input 输入:

ledColorList = raw_input("What color of light do you want to turn on? Red, green, blue, yellow, or all").lower().split(' ')

然后对照

if ledColorList[0] == "red":
    blink(7)  

【讨论】:

  • 谢谢,这使它按预期工作。由于我是 python 新手,你能解释一下是大写还是使用输入而不是 raw_input 导致它失败?
  • 你的问题在traceback中有小写的“red”,说明你有两个问题:1)没有变量叫“red”,只有一个叫“RED” 2)解决了这个问题使用 raw_input() 不能解决字符串比较的大小写问题。
【解决方案2】:

RED 是一个字符串,应该放在引号之间。

【讨论】:

  • 我已经解决了这个问题,它现在可以运行了,但是灯没有闪烁。知道为什么会这样吗?
【解决方案3】:

对于 python 2.x,您可以使用 raw_input() 而不是 input(),因为

在 Python 2.x 中,input() 需要一个 Python 表达式,这意味着如果您键入 red,它会将其解释为名为 red 的变量。如果你输入“红色”,那就没问题了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多