Python - Ayuda practica Python

   
Vista:

Ayuda practica Python

Publicado por toni (6 intervenciones) el 30/11/2017 20:13:09
Hola amigos, necesito ayuda con este script que no funciona bien y ya no se que cambiar, me seria de gran ayuda si alguien me ayudase, gracias.

El enunciado es el siguiente:

Realizar un script en python con el siguiente comportamiento:
Si se detecta movimiento (del sensor), se enciende un led amarillo, y se pregunta al
usuario por una palabra clave, de la siguiente manera:

al iniciar el script, se debe crear el siguiente diccionario:
contrasenas = {'color':'azul','flor':'amapola','animal':'perro','ciudad':'madrid','colegio':'salesianos'}

cuando se detecte movimiento, se generará un número aleatorio, y se preguntará al
usuario por el valor que coincide con la clave de la posición del número aleatorio.
Por ejemplo, si el número es el 0, se preguntará al usuario por un color, y si éste responde
“azul”, la respuesta se considerará como correcta, en caso contrario, como incorrecta; si
el número es el 3, se preguntará al usuario por un ciudad, y si éste responde “madrid”, la
respuesta se considerará como correcta, en caso contrario, como incorrecta.
Si la respuesta es correcta, se apaga el led y se vuelve a comprobar si se detecta
movimiento.

Si la respuesta es incorrecta, se enciende un led rojo y se genera una llamada automática
(a tu teléfono móvil) que al descolgar reproducirá el mensaje “se ha detectado
movimiento y la contraseña es incorrecta”.

Notas:
- Mientras no se detecte movimiento, se imprimirá por pantalla “no hay movimiento”.
- Generar el comportamiento dentro de un bucle infinito.
- Se deben controlar las interrupciones por teclado.

El codigo que llevo hecho es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import os
import time
import random
#!usr/bin/env/ python
import RPi.GPIO as GPIO
 
contrasenas = {'color':'azul','flor':'amapola','animal':'perro','ciudad':'madrid','colegio':'salesianos'}
clave = ('color','flor','animal','ciudad','colegio')
 
sensor = 14
led_amarillo = 2
led_rojo = 3
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2,GPIO.OUT)
GPIO.setup(3,GPIO.OUT)
GPIO.setup(14, GPIO.IN)
 
try:
        while True:
                if GPIO.input(14) == 0:
                        GPIO.output(2, True)
                        GPIO.output(3,False)
                        numero = random.randint(0,4)
                        print numero
                        print clave[numero]
                        pregunta = raw_input("Cual es la pregunta")
                        contrasenas.get(clave[numero])
                        print ("Contrasena correcta")
                        time.sleep(3)
 
 
                        GPIO.output(3,True)
                        GPIO.output(2,False)
                        print("Contrasena incorrecta")
                        os.system('cp contestador.call llamada.call')
                        os.system('mv llamada.call /var/spool/asterisk/outgoing')
 
 
                else:
                        print("No hay movimiento")
                        time.sleep(3)
 
 
except KeyboardInterrupt:
        GPIO.cleanup()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

Ayuda practica Python

Publicado por kip (204 intervenciones) el 30/11/2017 21:44:17
Hola, que problema tienes exactamente ? donde te da error o en que linea crees que el codigo no hace lo que desees ?

Te recomiendo el shebang lo coloques al inicio del script, antes de todo:

1
2
3
4
5
6
#!usr/bin/env/ python
 
import os
import time
import random
import RPi.GPIO as GPIO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda practica Python

Publicado por toni (6 intervenciones) el 30/11/2017 22:10:13
Pues el fallo que me da es que al ejecutar el script, si detecta movimiento (en el script lo tengo puesto a 0 para probar que funciona antes de montarlo), se enciende el led amarillo y me tiene que preguntar por una clave aleatoria y al introducir la contraseña si es correcta apaga el ese led y vuelve a preguntar, pero si la respuesta es incorrecta tiene que encenderse el led rojo y me genera la llamada con asterisk.

El problema es que al meter la contraseña si esta mal puesta me sigue poniendo correcta y me sigue preguntando, por tanto el problema estara entre la linea 29 y 35.

Gracias por tu recomendacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda practica Python

Publicado por toni (6 intervenciones) el 02/12/2017 11:30:34
Pues el fallo que me da es que al ejecutar el script, si detecta movimiento (en el script lo tengo puesto a 0 para probar que funciona antes de montarlo), se enciende el led amarillo y me tiene que preguntar por una clave aleatoria y al introducir la contraseña si es correcta apaga el ese led y vuelve a preguntar, pero si la respuesta es incorrecta tiene que encenderse el led rojo y me genera la llamada con asterisk.

El problema es que al meter la contraseña si esta mal puesta me sigue poniendo correcta y me sigue preguntando, por tanto el problema estara entre la linea 29 y 35.

Gracias por tu recomendación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar