Help python
Ayaaaao
2021-03-18 21:21:47
je dois créer des fonction, une qui convertit le temps en seconde et une autre qui convertit les seconde en jours/heure/minutes/secondes
#temps[0] : jours, temps[1]: heures, temps[2]: minutes, temps[3]: secondes
def tempsEnSeconde(temps):
""" Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde."""
print(temps[0] *86400 + temps[1] * 3600 + temps[2] * 60 + temps[3])
pass
temps = (3,23,1,34)
print(type(temps))
print(tempsEnSeconde(temps))
def secondeEnTemps(seconde):
"""Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument"""
i = int(seconde/86400)
reste = seconde
if i >= 1:
temps[0] = int(seconde/86400)
reste = reste%86400
elif int(reste/3600) >= 1:
temps[1] = int(reste/3600)
reste = reste%3600
elif int(reste/60) >= 1:
temps[2] = int(reste/60)
reste = reste%60
temps[3] = reste
pass
temps = secondeEnTemps(100000)
print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes")
la première fonction fonctionne mais pas la seconde
ca me met ce message "TypeError: 'tuple' object does not support item assignment "https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
Ayaaaao
2021-03-18 21:26:43
https://image.noelshack.com/fichiers/2018/10/7/1520802278-3.png
Ayaaaao
2021-03-18 21:30:08
https://image.noelshack.com/fichiers/2016/39/1474977832-sadchanclaloop.gif
Aldnoah
2021-03-18 21:30:22
Mets global temps en haut de ton code et juste au début de ta fonction si tu fais pas de return
Stanton_dowd
2021-03-18 21:30:32
Utilise a//b pour la division euclidienne plutôt que int(a/b)
1m63maisdeter
2021-03-18 21:32:35
temps = (3,23,1,34) est un tuple, et un tuple ne peut pas être modifié
donc tu ne peux pas faire temps[0] = int(seconde/86400) par la suite
Cisblanc
2021-03-18 21:32:56
Tu dois pouvoir trouver tout ce qu’il faut avec le module datetime, mais ça m’a tout l’air d’être un devoir scolaire
Aldnoah
2021-03-18 21:33:28
Le 18 mars 2021 à 21:32:35 1m63maisdeter a écrit :
temps = (3,23,1,34) est un tuple, et un tuple ne peut pas être modifié
donc tu ne peux pas faire temps[0] = int(seconde/86400) par la suite
Oui aussi
Fais un tableau ou une liste plutôt
1m63maisdeter
2021-03-18 21:33:47
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
EconomisteDeter
2021-03-18 21:36:05
Ca peut être utile de lire les erreurs hein
On te dit là que le tuple n'est pas alterable, c'est effectivement sa particularité. Crée une liste plutôt
1m63maisdeter
2021-03-18 21:36:49
Aussi, tu fais
temps = secondeEnTemps(100000)
sauf que ta fonction secondeEnTemps ne retourne (mot clé return) aucune valeur, donc ta variable temps vaut None et tu ne peux pas faire temps[0] dans le print.
Il faut juste appeler ta fonction secondeEnTemps qui s'occupe de modifier ta variable globale "temps".
Ayaaaao
2021-03-18 21:37:47
Le 18 mars 2021 à 21:33:47 1m63maisdeter a écrit :
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
Merci, donc je peux peut pas faire ca avec un tuple?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
EconomisteDeter
2021-03-18 21:39:11
Voici ton code fonctionnel, comme l'a dit un VDD il fallait aussi ajouter un 'return', sinon ta fonction ne sait pas quoi renvoyer
EDIT : il faudrait aussi modif la première fonction, en ajoutant le bon return si tu veux pouvoir stocker dans une variable.
def tempsEnSeconde(temps):
""" Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde."""
print(temps[0] *86400 + temps[1] * 3600 + temps[2] * 60 + temps[3])
pass
temps = [3,23,1,34]
print(type(temps))
print(tempsEnSeconde(temps))
def secondeEnTemps(seconde):
"""Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument"""
i = int(seconde/86400)
reste = seconde
if i >= 1:
temps[0] = int(seconde/86400)
reste = reste%86400
elif int(reste/3600) >= 1:
temps[1] = int(reste/3600)
reste = reste%3600
elif int(reste/60) >= 1:
temps[2] = int(reste/60)
reste = reste%60
temps[3] = reste
return(temps)
temps = secondeEnTemps(100000)
print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes")
1m63maisdeter
2021-03-18 21:39:16
Le 18 mars 2021 à 21:37:47 Ayaaaao a écrit :
Le 18 mars 2021 à 21:33:47 1m63maisdeter a écrit :
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
Merci, donc je peux peut pas faire ca avec un tuple?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
Non, tu ne peux pas modifier un tuple après sa création. Tu peux regarder les structures de données en Python pour voir rapidement les particularités des différentes structures.
Aldnoah
2021-03-18 21:39:16
Le 18 mars 2021 à 21:36:49 1m63maisdeter a écrit :
Aussi, tu fais
temps = secondeEnTemps(100000)
sauf que ta fonction secondeEnTemps ne retourne (mot clé return) aucune valeur, donc ta variable temps vaut None et tu ne peux pas faire temps[0] dans le print.
Il faut juste appeler ta fonction secondeEnTemps qui s'occupe de modifier ta variable globale "temps".
Si sa variable est globale il fait ce qu’il vaut sans return
chaudpenhauer
2021-03-18 21:40:04
Le 18 mars 2021 à 21:37:47 Ayaaaao a écrit :
Le 18 mars 2021 à 21:33:47 1m63maisdeter a écrit :
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
Merci, donc je peux peut pas faire ca avec un tuple?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
c'est pas modifiable les tuples igo , t'es en L1 info ?
Ayaaaao
2021-03-18 21:43:41
Le 18 mars 2021 à 21:39:11 EconomisteDeter a écrit :
Voici ton code fonctionnel, comme l'a dit un VDD il fallait aussi ajouter un 'return', sinon ta fonction ne sait pas quoi renvoyer
EDIT : il faudrait aussi modif la première fonction, en ajoutant le bon return si tu veux pouvoir stocker dans une variable.
def tempsEnSeconde(temps):
""" Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde."""
print(temps[0] *86400 + temps[1] * 3600 + temps[2] * 60 + temps[3])
pass
temps = [3,23,1,34]
print(type(temps))
print(tempsEnSeconde(temps))
def secondeEnTemps(seconde):
"""Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument"""
i = int(seconde/86400)
reste = seconde
if i >= 1:
temps[0] = int(seconde/86400)
reste = reste%86400
elif int(reste/3600) >= 1:
temps[1] = int(reste/3600)
reste = reste%3600
elif int(reste/60) >= 1:
temps[2] = int(reste/60)
reste = reste%60
temps[3] = reste
return(temps)
temps = secondeEnTemps(100000)
print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes")
Merci khey j'ai comprishttps://image.noelshack.com/fichiers/2016/30/1469541952-risitas182.png
EconomisteDeter
2021-03-18 21:43:53
Aussi khey, tu peux rendre ton code plus élégant en modifiant les print de cette manière (exemple sur la dernière ligne de ton code :
print(f'Il y a {temps[0]} jour(s), {temps[1]} heure(s), {temps[2]} minute(s), {temps[3]} seconde(s).')
Tu ajoutes un 'f' au début de ta chaîne de caractères, et tu ajoutes la variable à afficher entre crochets.
Ayaaaao
2021-03-18 21:44:17
Le 18 mars 2021 à 21:40:04 chaudpenhauer a écrit :
Le 18 mars 2021 à 21:37:47 Ayaaaao a écrit :
Le 18 mars 2021 à 21:33:47 1m63maisdeter a écrit :
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
Merci, donc je peux peut pas faire ca avec un tuple?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
c'est pas modifiable les tuples igo , t'es en L1 info ?
Ouihttps://image.noelshack.com/fichiers/2018/10/1/1520256134-risitasue2.png
newfag113701
2021-03-18 21:44:40
Le 18 mars 2021 à 21:37:47 Ayaaaao a écrit :
Le 18 mars 2021 à 21:33:47 1m63maisdeter a écrit :
Utilise plutôt une liste qui est modifiable.
temps = [3,23,1,34]
temps[0]=5
Merci, donc je peux peut pas faire ca avec un tuple?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png
Tu peux recréer un nouveau tuple.
Et évite d'utiliser des variables globales pour rien