使用列表进行信息存储

时间:2017-11-11 14:21:43

标签: python list variables raspberry-pi

我正在构建一个带有7个按钮,RFID阅读器和Raspberry Pi的周计划系统。

我从RFID标签获取活动,从按钮获取活动。当进入一天或进行活动时,我正在播放声音。

我想保存计划在什么日子里进行的活动。 例如:星期一 - 游泳,编码,博士。

这样我就可以读出特定日期的计划活动。

现在,我有选择日期和活动的代码,但我不确定如何存储信息供以后使用。

import mercury
import time
import RPi.GPIO as GPIO
import pygame

#Setting up the RFID reader
reader = mercury.Reader("tmr:///dev/ttyUSB0")
reader.set_region("EU3")
reader.set_read_plan([1], "GEN2")
#Setting up the GPIO pins for the 7 push buttons
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 22 = GPIO25
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 24 = GPIO8
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 26 = GPIO7
GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 32 = GPIO12
GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 36 = GPIO16
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 38 = GPIO20
GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 40 = GPIO21

#Enabling pygame to play sounds
pygame.init()

#Declaration of the RFID tags used in this example. 
tag1 = 'E2004005730702602190360B'
tag2 = 'E20040057307026421903619'
tag3 = 'E20040057307026221803410'
tag4 = 'E2004005730702662180341E'
tag5 = 'E20040057307027021803420'
#Setting what sound files to use and the paths
mandaglyd = pygame.mixer.Sound('/home/pi/Desktop/Mandag.wav')
tirsdaglyd = pygame.mixer.Sound('/home/pi/Desktop/Tirsdag.wav')
onsdaglyd = pygame.mixer.Sound('/home/pi/Desktop.onsdag.wav')
torsdaglyd = pygame.mixer.Sound('/home/pi/Desktop/torsdag.wav')
fredaglyd = pygame.mixer.Sound('/home/pi/Desktop/fredag.wav')
lordaglyd = pygame.mixer.Sound('/home/pi/Desktop/lordag.wav')
sondaglyd = pygame.mixer.Sound('/home/pi/Desktop/sondag.wav')


def setDay():
    while True:
        in22 = GPIO.input(22)
        in24 = GPIO.input(24)
        in26 = GPIO.input(26)
        in32 = GPIO.input(32)
        in36 = GPIO.input(36)
        in38 = GPIO.input(38)
        in40 = GPIO.input(40)
        if in22 == False:
                print('Monday')
                mandaglyd.play()
                time.sleep(2)
                break
        if in24 == False:
                print('Tuesday')
                tirsdaglyd.play()
                time.sleep(2)
                break
        if in26 == False:
                print('Onsdag')
                onsdaglyd.play()
                time.sleep(2)
                break
        if in32 == False:
                print('Torsdag')
                torsdaglyd.play()
                time.sleep(2)
                break
        if in36 == False:
                print('Fredag')
                fredaglyd.play()
                time.sleep(2)
                break
        if in38 == False:
                print('Lordag')
                lordaglyd.play()
                time.sleep(2)
                break
        if in40 == False:
                print('Sondag')
                sondaglyd.play()
                time.sleep(2)
                break               
def setActivity():
    while True:
        a = repr(reader.read())
        print (a)
        if tag1 in a:
                print('tag1')
                time.sleep(0.2)
                break
        if tag2 in a:
                print('tag2')
                time.sleep(0.2)
                break
        if tag3 in a:
                print('tag3')
                time.sleep(0.2)
                break
        if tag4 in a:
                print('tag4')
                time.sleep(0.2)
                break
        if tag5 in a:
                print('tag5')
                time.sleep(0.2)
                break
        time.sleep(0.2)

if __name__ == "__main__":
    setActivity()
    setDay() 

我应该为每一天创建一个列表,然后将活动附加到列表中。然后我可以在列表中搜索活动并根据搜索中找到的活动播放声音?这是一个更好的方法吗?

2 个答案:

答案 0 :(得分:2)

列表非常适合您打算以类似方式处理的事情。例如:

def setDay():
    while True:
        for pin, day,      sound        in [
           (22, 'Monday',  mandaglyd ),
           (24, 'Tuesday', tirsdaglyd),
           (26, 'Onsdag',  onsdaglyd ),
           (32, 'Torsdag', torsdaglyd),
           (36, 'Fredag',  fredaglyd ),
           (38, 'Lordag',  lordaglyd ),
           (40, 'Sondag',  sondaglyd ),
        ]:
            if GPIO.input(pin) == False:
                print(day)
                sound.play()
                time.sleep(2)
                return

对于长期存储(超出程序的单次运行),您可以考虑json使用更简单但任意的数据结构,csv表示简单表,shelve表示密钥/值存储或sqlite3表示完整的SQL关系数据库。

答案 1 :(得分:1)

我建议你学习面向对象的编程。您应该考虑创建一个表示您在程序中存储的数据的类。例如,您可以创建一个Activity类来存储活动名称和日期。

请记住,变量只存储在内存中。程序结束或机器关闭时,此数据将消失。如果要在程序执行之间永久存储数据,则必须以某种形式将其保存到文件中。