2016-07-17 43 views
1

我具有連接到樹莓裨3與下面碼的RGB LED。我想要做的是向用戶提供一個選擇紅色,綠色或藍色的問題,對應於鏈接到特定GPIO引腳的變量。下()函數不是把輸入在Python腳本3爲小寫爲樹莓裨

當用戶進入,紅色,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: 

任何幫助將不勝感激。

+2

你確定你使用Python 3? – melpomene

+1

的可能的複製[Python的輸入()錯誤 - NameError:未定義名稱 '...'](http://stackoverflow.com/questions/21122540/python-input-error-nameerror-name-is-not-定義) – zondo

+0

謝謝......據我可以告訴它的python 3.我讀過這篇文章:[Python輸入()錯誤 - 名稱錯誤:名稱'...'未定義](http://stackoverflow.com/questions/21122540/python-input-error-nameerror-name-is-not-defined),但它並沒有真正回答我的問題。如果我切換到raw_input(「Question here」),我可以得到類似的結果,但是我必須編寫額外的代碼。我希望能夠自動將用戶的輸入改爲小寫,然後將其轉換爲變量值16,20,21。我希望這是有道理的。 – theAussieGuy

回答

2

這不是Python3。 Python的3「輸入」將返回你一個字符串,然後你可以轉換爲小寫 - 但你的代碼不會有任何東西了,因爲用顏色名稱的string,檢索與具有相同名稱的變量相關的cotnents 。

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: 
     ... 
+0

非常感謝。這很容易理解。在'真的';'你寫了'color = color [request.lower()] 應該是color = colors [request.lower()]? (帶有'S') – theAussieGuy

+0

輸入錯誤 - 現在已修復。謝謝 – jsbueno

+0

太棒了,謝謝:) – theAussieGuy

相關問題