2017-06-03 1 views
1

Je travaille sur un projet automatisé de stores/rideaux depuis un certain temps. Tout fonctionne bien, mais je voudrais ajouter la fonction des stores qui s'ouvre progressivement le matin. Je lis mes valeurs à partir d'un fichier de configuration et ai converti les valeurs en chaînes qui fonctionnent bien, juste ne peut pas diviser cette valeur pour une raison quelconque. J'ai essayé plusieurs manières de le faire mais j'ai l'impression de rencontrer des erreurs telles que: - SyntaxError: impossible d'assigner à l'opérateur et TypeError: impossible de concaténer les objets 'str' et 'int'. Quelqu'un at-il une idée sur la façon dont je peux diviser une chaîne python puis utiliser cette chaîne comme une valeur de sommeil ??Diviser les cordes en python 2.7

Je suis assez nouveau à la programmation (je suis 13)

from ConfigParser import SafeConfigParser 
config = SafeConfigParser() 

config.read('/home/pi/config.conf') #read config file 
openTime = config.get('blinds', 'open time(secs)') # -> "openTime" 
print 'Overall open time ' + openTime + ' seconds' 

## code to divide openTime by 5 and print the value 

print 'gradual open time' + DividedOpenTime + ' seconds' 

## code to repeat in a loop 5 times with a sleep of the value of 
## DividedOpenTime  

EDIT 1

Salut à nouveau je l'ai fait ce qu'on m'a dit d'ajouter au code et il a résolu le question de la division et du temps de sommeil, mais pour une raison quelconque, je ne peux pas imprimer les valeurs. Les deux lignes 11 et 15 ont l'erreur suivante:

Traceback (most recent call last): 
    File "test.py", line 11, in <module> 
    print 'gradual open time' + divOpenTime + ' this will repeat 5 times' 
TypeError: cannot concatenate 'str' and 'float' objects 

Est-ce que quelqu'un sait comment je peux résoudre ce problème?

from ConfigParser import SafeConfigParser 
config = SafeConfigParser() 
import time 

config.read('/home/pi/config.conf') #read config file 
openTime = config.get('blinds', 'open time(secs)') # -> "openTime" 
print 'Overall open time ' + openTime + ' seconds' 

divOpenTime = float(openTime)/5 #working (: 
loop = 0 
print 'gradual open time' + divOpenTime + ' this will repeat 5 times' 

for x in range(0, 5): 
    loop += 1 
    print 'gradual opening stage ' + loop + '/5' 
    #GPIO true- I know how to do this 
    time.sleep(divOpenTime) #working (: 
    #GPIO False- I know how to do this 
    time.sleep(15) #time between each interval fixed value 

Merci Ed

+0

Les erreurs sont la partie la plus importante d'entre nous vous aider. S'il vous plaît poster les erreurs comme c'est ici aussi. Et bravo à vous pour avoir commencé à programmer à un âge où la plupart des sacs paresseux ne faisaient que jouer aux jeux vidéo :) – Ray

+0

Merci, en espérant ajouter plus de choses comme des cartes relais et des trucs à mon projet de domotique une fois que j'ai trié i va ajouter des erreurs la prochaine fois @Ray –

Répondre

2

Vous devez convertir la chaîne en un nombre pour faire des calculs avec elle,

DividedOpenTime = float(openTime)/5 
+0

A travaillé dans mon code, mais ne peut pas imprimer les valeurs pour une raison quelconque voir mon édition sur ma question. Merci pour votre aide, car il a résolu le problème principal –

0

ça a marché

print 'Gradual open time ' + str(divOpenTime) + ' seconds this will repeat 5 
times' 

vous devez ajouter/Convertissez votre valeur float en une chaîne afin qu'elle puisse imprimer. Vous faites cela avec :

str(Your_float_value_here) 

Merci encore pour votre aide Ed

+0

Ou utiliser la mise en forme, '"% 8.4f "% divOpenTime' convertit également le flottant en une chaîne avec une longueur contrôlée et le nombre de décimales (c'est un ancien style, le cadre de formatage de chaînes également une version modernisée). – LutzL