IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Chapitre 35. fonction next


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chômeur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chômeur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Points : 14
    Points
    14
    Par défaut Chapitre 35. fonction next
    wesh les gars,

    j'ai ce code au chapitre 35 du bouquin. On me demande de decrypter le code pour revisiter ce que j'ai appris les chapitres d'avant.
    J'ai pas très bien compris l'avantage de mettre "next" plutôt que de stocker directement dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    from sys import exit
     
    def gold_room():
        print("This room is full of gold. How much do you take?")
     
        next = input("> ")
        if "0" in next or "1" in next:
            how_much = int(next)
        else:
            dead("Man, learn to type a number.")
     
        if how_much < 50:
            print("Nice, you're not greedy, you win!")
            exit(0)
        else:
            dead("You greedy bastard!")
     
     
    def bear_room():
        print("There is a bear here.")
        print("The bear has a bunch of honey.")
        print("The fat bear is in front of another door.")
        print("How are you going to move the bear?")
        bear_moved = False
     
        while True:
            next = input("> ")
     
            if next == "take honey":
                dead("The bear looks at you then slaps your face off.")
            elif next == "taunt bear" and not bear_moved:
                print("The bear has moved from the door. You can go through it now.")
                bear_moved = True
            elif next == "taunt bear" and bear_moved:
                dead("The bear gets pissed off and chews your leg off.")
            elif next == "open door" and bear_moved:
                gold_room()
            else:
                print("I got no idea what that means.")
     
     
    def cthulhu_room():
        print("Here you see the great evil Cthulhu.")
        print("He, it, whatever stares at you and you go insane.")
        print("Do you flee for your life or eat your head?")
     
        next = input("> ")
     
        if "flee" in next:
            start()
        elif "head" in next:
            dead("Well that was tasty!")
        else:
            cthulhu_room()
     
     
    def dead(why):
        print(why, "Good job!")
        exit(0)
     
     
    def start():
        print("Type 'left' to take the left door. Type 'right' to take the right door.")
     
        next = input("> ")
     
        if next == "left":
            bear_room()
        elif next == "right":
            cthulhu_room()
        else:
            dead("You stumble around the room until you starve.")
     
    start()

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 576
    Points : 2 020
    Points
    2 020
    Par défaut
    next est une variable.

    Elle reçoit le contenu saisi au clavier par l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    In [1]: next = input('> ')
    > toto
     
    In [2]: print(next, type(next))
    toto <class 'str'>
     
    In [3]:

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 871
    Points : 1 524
    Points
    1 524
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par Yuseph Voir le message
    J'ai pas très bien compris l'avantage de mettre "next" plutôt que de stocker directement dans une variable.
    Je ne comprends pas ce que tu veux dire.... next est déjà une variable.

    édit: grillé par Arioch

    @Yuseph: C'est quoi comme bouquin? Je trouve l'usage de exit() pas très python...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Il faut éviter d'utiliser le nom d'une fonction built-in pour ses variables références.
    https://docs.python.org/3/library/functions.html#next

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 698
    Points : 30 997
    Points
    30 997
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Hominidé Voir le message
    Je trouve l'usage de exit() pas très python...
    Sisi, c'est une fonction autorisée => https://docs.python.org/fr/3/library...ight=exit#exit
    https://www.delftstack.com/fr/howto/python/python-exit/
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 871
    Points : 1 524
    Points
    1 524
    Billets dans le blog
    4
    Par défaut
    Oui cela est autorisé (tout comme global() ^^). Je me suis mal exprimé c'est dans dans le cas présent que je trouve son emploie pas très lisible (donc pas très python).
    à la rigueur, je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def truc():
        for _ in range(1, 10):
            print('Fait ceci, fait cela in truc')
            if _ == 3:
                return True
     
    compteur = 0
    while True:
        compteur += 1
        print('compteur', compteur)
        if compteur == 3:
            if truc():
                exit()
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 698
    Points : 30 997
    Points
    30 997
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je me suis mal exprimé c'est dans dans le cas présent que je trouve son emploie pas très lisible (donc pas très python).
    Ah oui, dans le dead() tu veux dire...
    C'est vrai que "traditionnellement" on ne doit utiliser exit() que dans le main() (ou comme tu le montres, dans le corps principal du programme).
    Mais là je vois un peu ça comme une espèce de "surcharge". Au lieu de quitter, on explique en plus pourquoi on quitte et on quitte. Bon c'est pas forcément primordial mais si seule la fonction "dead" contient le exit() et si ensuite tout passe par dead, ça devient plus acceptable...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Hominidé Voir le message
    Je me suis mal exprimé c'est dans dans le cas présent que je trouve son emploie pas très lisible (donc pas très python).
    Vu la structure du programme, difficile de s'en passer (voir la récursion dans "start" de temps en temps). Sinon, il faut hiérarchiser et écrire un code plus structuré.

    Je ne sais pas quel est la motivation du bouquin que lit le PO, mais ce genre de construction au chapitre 35 laisse penser qu'on est plutôt dans une approche ludique de la programmation.

    Mais si arrivé au chapitre 35, on ne sait pas trop ce que sont les variables... soit le bouquin est mauvais soit le PO a survolé nombre de chapitres.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 576
    Points : 2 020
    Points
    2 020
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Je ne sais pas quel est la motivation du bouquin que lit le PO, mais ce genre de construction au chapitre 35 laisse penser qu'on est plutôt dans une approche ludique de la programmation.

    Mais si arrivé au chapitre 35, on ne sait pas trop ce que sont les variables... soit le bouquin est mauvais soit le PO a survolé nombre de chapitres.

    - W
    S'il s'agit vraiment d'un bouquin "ludique" sur Python, peut être est-ce une version manga ?

    Auquel cas, mieux vaut commencer par la fin

    Nom : giphy.gif
Affichages : 91
Taille : 994,8 Ko

  10. #10
    Membre à l'essai
    Homme Profil pro
    Chômeur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chômeur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Points : 14
    Points
    14
    Par défaut
    Le PO a réécrit le code à sa façon donc le PO maitrise tous les chapitres précédents.
    C'est bon pour exit. pigé. j'avais pris l'habitude de nommer une variable différente pour chaque tâche.
    Pour exit, je ne vois pas de main dans le programme. je ne considère pas start comme un main. Ce sont des choix, parmi lesquels dead doit obligatoirement se terminer par une sortie de programme. Bref merci on avance dans le bouquin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    from sys import exit
     
    def zion():
        print("Get some rest. By the way, how many soldiers do you need ?")
        next = input("> ")
        soldiers = int(next)
        if soldiers < 50:
            print("Good. Let's end this war.")
            exit(0)
        else:
            dead("That's too many men. One of them was a traitor and killed you.")
     
     
    def real_world():
        print("Ok here's an airship. Take it to reach Zion.")
        print("Press 'speed' if you want to avoid the sentinel.")
        print("Press 'attack' when facing the sentinel.")
        print("Press 'attack' again if you plan to go on a crusade against sentinels.")
        print("Press 'land on Zion' after killing the sentinel.")
        sentinel_killed = False
     
        while True:
            next = input("> ")
            if next == "speed":
                dead("You crashed and died.")
            elif next == "attack" and not sentinel_killed:
                print("Nice shot ! You killed it instantly.")
                sentinel_killed = True
            elif next == "attack" and sentinel_killed:
                dead("It was suicidal. You died.")
            elif next == "land on Zion" and sentinel_killed:
                zion()
            else:
                print("You can only speed or attack.")
     
    def dream_world():
        print("Type 'meet' if you have regrets and decide to meet me again.")
        print("Type 'end' if you just don't want to be anymore.")
        next = input("> ")
        if "meet" in next:
            start()
        elif "end" in next:
            dead("You chose to die")
        else:
            dream_world()
     
     
    def dead(reason):
        print(reason, "How can it be ?")
        exit(0)
     
     
    def start():
        print("Press 1 to choose the red pill. Press 2 to choose the blue pill.")
        next = input("> ")
        if next == "1":
            real_world()
        elif next == "2":
            dream_world()
        else:
            dead("You chose to die.")
     
     
    start()

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Yuseph Voir le message
    j'avais pris l'habitude de nommer une variable différente pour chaque tâche.
    Vos taches sont des fonctions.
    Les variables créées dans le corps de la fonction sont locales.

    Elles peuvent donc avoir un nom identique puisque leur portée est limitée à la fonction.

    Ici, les fonctions ont un rôle similaire: saisie de l'entrée, puis appel de la fonction suivante (d'où le nom "next") en fonction de la chaîne de caractères saisie.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 871
    Points : 1 524
    Points
    1 524
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Yuseph Voir le message
    Le PO a réécrit le code à sa façon donc le PO maitrise tous les chapitres précédents.
    Tu demanderas au PO, s'il veut bien me répondre, de quel livre ou ressource il s'agit?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 123
    Points : 4 493
    Points
    4 493
    Par défaut
    salut
    Citation Envoyé par Yuseph Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if "0" in next or "1" in next:
    pas trop "python" ce code surtout pour un "livre" de cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if next in ("0", "1"):
    # on peut même ajouter un filtre minimum, par exemple
    #if next.strip() in ("0", "1"):
    $moi= ( !== ) ? : ;

  14. #14
    Membre à l'essai
    Homme Profil pro
    Chômeur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chômeur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Tu demanderas au PO, s'il veut bien me répondre, de quel livre ou ressource il s'agit?
    C'est learn Python the hard way. Le suivant plus avancé learn more Python the hard way. C'est le seul titre que j'ai trouvé qui couvre tout le programme des certificats PCEP, PCAP et PCPP. J'avais déjà tapé le bouquin Python all in one for dummies mais pas assez approfondi.

  15. #15
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 871
    Points : 1 524
    Points
    1 524
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Yuseph Voir le message
    C'est learn Python the hard way. Le suivant plus avancé learn more Python the hard way. C'est le seul titre que j'ai trouvé qui couvre tout le programme des certificats PCEP, PCAP et PCPP. J'avais déjà tapé le bouquin Python all in one for dummies mais pas assez approfondi.
    Je te remercie.
    Je vais en profiter pour voir à quoi correspondent les certificats que tu énumères...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

Discussions similaires

  1. Penser en C++ chapitre 14 exercice 9
    Par bertry dans le forum Débuter
    Réponses: 4
    Dernier message: 13/10/2011, 11h21
  2. Ne rien afficher
    Par rockbiker dans le forum DirectX
    Réponses: 3
    Dernier message: 20/05/2003, 18h02
  3. [debutante] [JDBComboBox]rien à l'affichage
    Par Lina dans le forum JBuilder
    Réponses: 3
    Dernier message: 22/11/2002, 13h31
  4. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo