Récupérer une variable prédéfinie comme input
Résolu/Fermé
A voir également:
- Récupérer une variable prédéfinie comme input
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
5 réponses
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
13 oct. 2020 à 23:22
13 oct. 2020 à 23:22
Bonjour,
Je ne fais pas de python... mais... Truc tout bête.... à tout hasard...
Ca ne serait pas plutôt
Je ne fais pas de python... mais... Truc tout bête.... à tout hasard...
Candidat=input("Homme : ")#input Man Candidat=input("Femme : ")#input Woman compare(Test1,Test2)#comparing
Ca ne serait pas plutôt
Test1=input("Homme : ")#input Man Test2=input("Femme : ")#input Woman compare(eval(Test1),eval(Test2))#comparing
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
149
Modifié le 14 oct. 2020 à 00:13
Modifié le 14 oct. 2020 à 00:13
Salut,
Jordane est peut-être un génie mais je te conseille de taper : danger eval python sur un moteur de recherche.
Exemple : https://stackoverflow.com/questions/1832940/why-is-using-eval-a-bad-practice
je ne suis pas prof, par contre, si je l'étais, je vois un eval sur une copie, je la démonte. En gros, je ne donne même pas la moyenne.
L'utilisation d'instructions dangereuses c'est comme un HS sur une dissertation.
Jordane est peut-être un génie mais je te conseille de taper : danger eval python sur un moteur de recherche.
Exemple : https://stackoverflow.com/questions/1832940/why-is-using-eval-a-bad-practice
je ne suis pas prof, par contre, si je l'étais, je vois un eval sur une copie, je la démonte. En gros, je ne donne même pas la moyenne.
L'utilisation d'instructions dangereuses c'est comme un HS sur une dissertation.
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
347
14 oct. 2020 à 18:24
14 oct. 2020 à 18:24
Bonjour,
Je suis d'accord avec vous sur le fait que eval est généralement à éviter dans un code python, cependant, je pense qu'il faut relativisé le danger.
Si eval est déconseillé, c'est en premier lieu car elle permet à l'utilisateur d'executer n'importe quel code arbitrairement et cela peut constituer une faille de sécurité. Cependant, ce n'est pas un code qui sera accessible à distance. Pour pouvoir l'executer il faudra être déjà connecté à la machine, et dans ce cas on n'a pas besoin de ce code python pour faire ce que l'on veut.
Et pour ce qui concerne la propreté du code et sa robustesse, je pense que l'on peut faire tout autant de reproche à votre solution (bien qu'elle réponde parfaitement à la question posée). Par exemple si l'utilisateur entre le nom d'un candidat qui n'existe pas, le programme plante. Pour un programme en production, ce n'est pas mieux que le programme de Jordane.
Loin de moi l'idée de vous critiquer, mais je voulais juste indiquer que l'utilisation du eval dans ce contexte, sachant qu'il s'agit d'un exercice, n'est à mon avis pas à rejeté avec autant de femeté :)
Je vous souhaite une très bonne soirée.
Je suis d'accord avec vous sur le fait que eval est généralement à éviter dans un code python, cependant, je pense qu'il faut relativisé le danger.
Si eval est déconseillé, c'est en premier lieu car elle permet à l'utilisateur d'executer n'importe quel code arbitrairement et cela peut constituer une faille de sécurité. Cependant, ce n'est pas un code qui sera accessible à distance. Pour pouvoir l'executer il faudra être déjà connecté à la machine, et dans ce cas on n'a pas besoin de ce code python pour faire ce que l'on veut.
Et pour ce qui concerne la propreté du code et sa robustesse, je pense que l'on peut faire tout autant de reproche à votre solution (bien qu'elle réponde parfaitement à la question posée). Par exemple si l'utilisateur entre le nom d'un candidat qui n'existe pas, le programme plante. Pour un programme en production, ce n'est pas mieux que le programme de Jordane.
Loin de moi l'idée de vous critiquer, mais je voulais juste indiquer que l'utilisation du eval dans ce contexte, sachant qu'il s'agit d'un exercice, n'est à mon avis pas à rejeté avec autant de femeté :)
Je vous souhaite une très bonne soirée.
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
149
>
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
14 oct. 2020 à 21:50
14 oct. 2020 à 21:50
Dans ce contexte oui. Mais je pense que lors d’un exercice, il faut penser au pire.
Ziomix
>
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
14 oct. 2020 à 23:13
14 oct. 2020 à 23:13
Merci à vous dachiasse en tout cas pour cette superbe aide très instructive et complète, je m'en inspirerais pour mes prochains projets :) C'est super cool qu'il y ai toujours des gens pour répondre à nos questions dans les forums !
Merci, bonne fin de soirée
Merci, bonne fin de soirée
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
149
Modifié le 14 oct. 2020 à 03:00
Modifié le 14 oct. 2020 à 03:00
Voici ma proposition. Aucun eval, un algorithme de comparaison de moins de 20 lignes.
Je n'ai pas géré l'erreur du prénom inexistant dans le dictionnaire.
Je n'ai pas géré l'erreur du prénom inexistant dans le dictionnaire.
from itertools import zip_longest # un dictionnaire avec comme paire clé, valeur : prénom du candidat, son instance dico_candidat = {} class Candidat: # l'attribut prenom permet l'ajout du candidat dans le dictionnaire # l'attribut *caracteristiques est un tuple d'une longueur définie dynamiquement après instanciation # cet attribut contient des éléments de type entier (plus facile et plus rapide à calculer pour le processeur) def __init__(self, prenom, masculin, *caracteristiques): self.prenom = prenom self.masculin = masculin self.caracteristiques = caracteristiques dico_candidat[self.prenom] = self def comparer(self, other, toutes=False): # je te laisse te faire plaisir dans l'algo de cette méthode # mais, force est de constater que la mienne fait une quinzaine de lignes, la tienne en fait à peu près 150 resultat = 0 if not toutes: # dans le cas où on ne compare que les n premières caractéristiques inscrites for self_carac, other_carac in zip(self.caracteristiques, other.caracteristiques): resultat += abs(self_carac - other_carac) else: # dans ce cas, toute caractéristique non inscrite par le candidat prend la valeur de -11 (nombre arbitraire) for self_carac, other_carac in zip_longest(self.caracteristiques, other.caracteristiques, fillvalue=-11): resultat += abs(self_carac - other_carac) if resultat == 0: print("100%") if 0 < resultat < 4: print("75%") if 4 <= resultat < 8: print("50%") if 8 <= resultat < 17: print("25%") if resultat >= 17: print("0%") # J'ai volontairement mis un nombre de caractéristiques différent pour chaque candidat Bryan = Candidat("Bryan", True, 2,3,3,2,1,3,4,5,5,5) Adrien = Candidat("Adrien", True, 4,5,5,5,4,0,0,4) Anissa = Candidat("Anissa", False, 5,3,5,0,0,2) Melanie = Candidat("Melanie", False, 4,5,5,5,5,4,4,2,0,3,4,4,5) # si tu compares ces 2 candidats, tu obtiendras 100 % Alcaraz = Candidat("Alcaraz", True, 4,3,2,1) LeaMary = Candidat("LeaMary", False, 4,3,2,1) print(dico_candidat.keys()) homme = input("Tapez un prénom masculin dans le dictionnaire : ") femme = input("Tapez un prénom féminin dans le dictionnaire : ") # Dans tes input, tu ne compares que des personnes de sexe opposé. if dico_candidat[homme].masculin == dico_candidat[femme].masculin: print("Cette version permet de ne comparer que deux personnes de sexes opposés.") else: print("Si vous voulez comparez toutes les caractéristiques\n(certaines personnes ont omis des caractéristiques), répondez oui.") print("Toute autre réponse équivaut à un non") toutes = input("Toutes les caractéristiques ? (oui ?) : ") if toutes.strip().lower() == "oui": # nettoie la donnée reçu, " OUi " devient "OUi" après strip() puis "oui" après lower() dico_candidat[homme].comparer(dico_candidat[femme], True) else: dico_candidat[homme].comparer(dico_candidat[femme])
Comment dire, tu ne fais peut-être pas de python(ce qui m'étonne) mais t'es un putain de génie mec, ça marche merciiiiiiiii, c'était vraiment tout simple en plus (enfin pour toi). J'ai également trouvé une solution sur un forum anglophone mais qui pour le coup était plus compliqué à comprendre et plus longue :)
Merci encore !!
Merci encore !!
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
13 oct. 2020 à 23:51
13 oct. 2020 à 23:51
Je fais d'autres langage de programmation.... Ça aide.
Ce n'est qu'une question de logique. Il n'est pas si compliqué de passer d'un langage à un autre.
Bonne soirée.
Ce n'est qu'une question de logique. Il n'est pas si compliqué de passer d'un langage à un autre.
Bonne soirée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question