2016-07-17 20 views
2

我有一个Raspberry Pi 3,并且正在使用Python 3编写代码。我在我的代码中添加了一个请求,要求用户输入三个数字,如果R,G或B打开或关闭(0 =关和1 =开)。例如,101意味着R = on,B = off和G = on。请求与Raspberry Pi上的RGB LED相关的整数期间出错

但我不断收到一个错误,我认为这是关系到Python的版本,我使用(Python 3中):

TypeError: object of type 'int' has no len()

我是继YouTube的教程在这里:Controlling a RGB LED with a raspberry pi

import time 
import RPi.GPIO as GPIO 

R = 16 
G = 20 
B = 21 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(R,GPIO.OUT) 
GPIO.setup(G,GPIO.OUT) 
GPIO.setup(B,GPIO.OUT) 
GPIO.output(R,GPIO.HIGH) 
GPIO.output(G,GPIO.HIGH) 
GPIO.output(B,GPIO.HIGH) 

def clearCh(): 
    GPIO.cleanup(R) 
    GPIO.cleanup(G) 
    GPIO.cleanup(B) 

try: 
    while True: 
     request = input("RGB-->") 
     if (len(request) == 3): 
      GPIO.output(R, int(request[0])) 
      GPIO.output(G, int(request[1])) 
      GPIO.output(B, int(request[2])) 

except KeyboardInterrupt: 
clearCh() 

任何提示指向我在正确的方向将不胜感激。

注意,我也试过如下:if (len(str(request)) == 3):这给了以下错误:

TypeError: 'int' object has no attribute '__getitem__'

回答

2

TypeError: object of type 'int' has no len()

看来input返回的是一个整数(数据类型)的数据,如您输入的101。您可以尝试将input返回的数据转换为字符串(另一种数据类型),但您需要以该格式将其存储为索引。做len(str(request))只会将request中的数据转换为该行代码的字符串,但不影响request对象。

try: 
    while True: 
     request = input("RGB-->") 
     request = str(request) 
     if (len(request) == 3): 
      GPIO.output(R, int(request[0])) 
      GPIO.output(G, int(request[1])) 
      GPIO.output(B, int(request[2])) 

当你有request为等于101然后request[0]指向字符串数据类型最左边的1request[1]指向0,等等。最后,int()将这些数字字符串转换为整数数据类型。

此外,不要忘记缩进if块下的代码行。


最后,一个很好的方式来测试你与使用type()命令工作的数据类型。作为一个实验(或者作为“完整性检查”),您可以在将代码转换为字符串之前和之后将type(request)添加到您的代码中。

+1

谢谢加里。这就说得通了。感谢您花时间回答。 它进行这些更改后工作。 – theAussieGuy

-1

看来,蟒蛇内置函数len()的整数不起作用。所以你可能想要做的是在测量长度之前确定它是一个字符串。

try: 
    while True: 
     request = str(input("RGB-->")) 
     if (len(request) == 3): 
     GPIO.output(R, int(request[0])) 
     GPIO.output(G, int(request[1])) 
     GPIO.output(B, int(request[2])) 

except KeyboardInterrupt: 
clearCh() 
+0

谢谢。我尝试了基于另一个Stack Overflow文章,但后来我得到另一个错误:** TypeError:'int'object has no attribute'__getitem __'** – theAussieGuy

+0

当您检索值,如int(request [0]) ',你期望'request'是一个字符串,但它仍然是一个整数,整数不能作为列表访问。我编辑了我的答案立即转换为字符串。 –