2016-07-17 8 views
1

아래 코드로 Raspberry Pi 3에 연결된 RGB LED가 있습니다. 내가하고 싶은 일은 특정 GPIO 핀에 연결된 변수에 해당하는 Red, Green 또는 Blue를 선택하는 질문을 사용자에게 제시하는 것입니다.lower() 함수는 python에서 입력을 소문자로 변환하지 않습니다. Raspberry Pi 용 3 스크립트

사용자가 빨간색으로 들어가면 LED가 빨간색으로 변합니다. 파란색으로 들어가면 LED가 파란색으로 바뀝니다.

현재 빨간색으로 입력하면 코드는 BCM 핀 20에 해당하는 '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: 

모든 도움을 주시면 감사하겠습니다.

+2

당신이 파이썬 3 사용하고 있는지 있습니까? – melpomene

+1

[Python input() error - NameError : name '...'이 정의되지 않았습니다.] (http://stackoverflow.com/questions/21122540/python-input-error-nameerror-name-is-not- – zondo

+0

고맙습니다 ... 제가 말할 수있는 한 파이썬 3입니다. 기사를 읽었습니다 : [Python input() error - NameError : name '...'이 정의되지 않았습니다.] (http://stackoverflow.com/questions/21122540/python-input-error-nameerror-name-is-not-defined)하지만 실제로 내 질문에는 답하지 않습니다. raw_input ("여기에 질문")으로 변경하면 비슷한 결과가 나올 수 있지만 추가 코드를 작성해야합니다. 사용자의 입력 값을 소문자로 자동 변경하여 변수 값이 16, 20, 21로 변환되기를 바랬습니다. 의미가 있습니다. – theAussieGuy

답변

2

이것은 파이썬 3이 아닙니다. 파이썬의 3 "입력"은 문자열을 반환합니다.이 문자열은 소문자로 변환 할 수 있습니다. 그러나 코드에 아무 것도 없습니다. string에 색상 이름이 지정되면 같은 이름의 변수와 연결된 cotnents를 검색합니다 .

파이썬 2의 입력은 사용자가 파이썬 표현식으로 입력 한 모든 것을 실행하여 결과를 반환하기 전에 eval을 수행합니다. 따라서 사용자가 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: 
     ... 
+0

대단히 감사합니다. 그것은 매우 이해하기 쉽습니다. '진실한 동안' 코드 섹션에서 'color = color [request.lower()]라고 썼습니다. color = colors [request.lower()]? ('S'포함) – theAussieGuy

+0

입력 오류 - 지금 수정되었습니다. 감사합니다 – jsbueno

+0

환상, 감사합니다 :) – theAussieGuy