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 :

Horoscope chinois en fonction de l'année entrée..


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut Horoscope chinois en fonction de l'année entrée..
    Bonsoir..

    Je suis un peu dans la "merde" comme on dit.. Je dois rendre un travail demain et je l'avais oublié. Donc je m'y suis mis un peu tard et je me casse depuis 1h30 la tête sur ce programme..

    Alors, je dois programmer un programme qui demande à l'utilisateur d'entrer son année de naissance et ensuite le programme va chercher dans un fichier texte, créé auparavant, le signe chinois correspondant à sa date et un petit commentaire...

    Le programme :

    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
     
    # -*- coding: cp1252 -*-
     
    # Fonctions :
     
    def transAnneeNumL(annee):
        'calcul du bon numéro de ligne'
     
        ligne=(int(annee)%12)+9
        if ligne<=12:
            numLigne=ligne-1
        elif ligne>12:
            numLigne=ligne
        return numLigne         #Renvoi le bon numéro de ligne
     
     
    def lectFichierHoroscope(ligne):
        'lecture de la bonne ligne'
     
        fichier=open("SignesComm","r")          #Ouverture du fichier
        n=0
        while n<=ligne:                         #Boucle qui va jusqu'au bon signe
            signe=fichier.readline()            #Fermeture du fichier
            n+=1                                #Incrémentation
        fichier.close()                         #Renvoi le bon signe
        return signe
     
     
    # Programme principal :
     
    while 1:                         
     
        annee=raw_input("Entrez vôtre année de naissance : ")     #Encodage de l'année
     
        if annee == "":
            print "Aurevoir !"
            break
     
        else:
            nLigne=transAnneeNumL(annee)                #Démarrage fonction qui renvoie la bonne ligne
            signe=lectFichierHoroscope(nLigne)          #Démarrage fonction qui renvoie le bon signe
            print signe                                 #Affichage du signe
    Et voici le fichier avec le texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Rat : autonome et secret, vous savez vous faufiler dans la vie en évitant habilement les obstacles.
    Boeuf : patient et persévérant, vous savez mener tous vos projets à terme.
    Tigre : dynamique et audacieux, votre instinct vous guide face aux obstacles.
    Lapin ; raffiné et discret, vous êtes apprécié pour votre constante sérénité.
    Dragon : ambitieux et énergique, vous avez besoin de défis pour satisfaire votre personnalité. 
    Serpent : cultivé et raffiné, vous aimez les sujets philosophiques, métaphysiques et abstraits. 
    Cheval : sociable et actif, vous aimez rencontrer de nouveaux visages et partager vos émotions.
    Chèvre : artiste avant tout, vous portez un regard d'esthète sur le monde qui vous entoure.
    Singe : enthousiaste et inventif, vous êtes doué de multiples talents.
    Coq : excentrique, vous savez attirer l'attention.
    Chien : logiques et réalistes, vos jugements sont pertinents et directs.
    Cochon : calme et serviable, vous êtes incapable de mentir.
    Un tout tout grand merci d'avance.. Je déprimes !

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Je crois que ton problème (même si tu ne le précises pas, ce qui est regrettable… ) viens de ta ligne ligne=(int(annee)%12)+9, qui produit des numéros de lignes entre 9 et 21… Je pense que tu voulais plutôt ça*: ligne=(int(annee)+9)%12, non*?

    Sinon, voici une version largement simplifiée de ton programme –*sûrement pas parfaite (je vois déjà certains ici qui affûtent leurs ifs et leurs __name__…), et utilisant peut-être des trucs que tu n’as pas encore vu (comme with), mais bon… Si tu dois n’en retenir qu’une seule chose, c’est*: lis tout ton fichier d’un coup, une seule fois au démarrage, et stocke-z-en les lignes dans une liste !

    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
    # Init (lecture de l'horoscope).
    hor = []
    with open("SignesComm","r") as fichier: #Ouverture du fichier
        hor = fichier.readlines()           #Lit toutes les lignes du fichier et en remplit hor.
     
    # Programme principal :
     
    while 1:
        annee=raw_input("Entrez votre annee de naissance : ")     #Encodage de l'annee
     
        if annee == "":
            print "Au revoir !"
            break
        else:
            print hor[(int(annee)+9)%12]

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Juste deux notes matinales, sans affûtage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hor = []
    with open("SignesComm","r") as fichier: #Ouverture du fichier
        hor = fichier.readlines()           #Lit toutes les lignes du fichier et en remplit hor.
    .readlines() retourne une liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("SignesComm", "r") as fichier: #Ouverture du fichier
        hor = fichier.readlines()           #Lit toutes les lignes du fichier et en remplit hor.
    Ou pour tonykart13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fichier = open("SignesComm", "r")
    hor = fichier.readlines()
    fichier.close()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if annee == "":
            print "Au revoir !"
            break
        else:
            print hor[(int(annee)+9)%12]
    Si le but de if c'est break pourquoi else ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if annee == "":
            print "Au revoir !"
            break
        print hor[(int(annee)+9)%12]
    Ceci dit le calendrier chinois étant soli-lunaire un calcul juste sur l'année est faux* (et celui de mont29 pire: Je ne suis pas un cochon mais un chien ! Non mais...).

    Bon courage

    @+

    *)
    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
    1900 jan. 31 	1901 fév. 18 	1960 jan. 28 	1961 fév. 14 	rat
    1901 fév. 19 	1902 fév. 07 	1961 fév. 15 	1962 fév. 04 	buffle
    1902 fév. 08 	1903 jan. 28 	1962 fév. 05 	1963 jan. 24 	tigre
    1903 jan. 29 	1904 fév. 15 	1963 jan. 25 	1964 fév. 12 	lièvre
    1904 fév. 16 	1905 fév. 03 	1964 fév. 13 	1965 fév. 01 	dragon
    1905 fév. 04 	1906 jan. 24 	1965 fév. 02 	1966 jan. 20 	serpent
    1906 jan. 25 	1907 fév. 12 	1966 jan. 21 	1967 fév. 08 	cheval
    1907 fév. 13 	1908 fév. 01 	1967 fév. 09 	1968 jan. 29 	chèvre
    1908 fév. 02 	1909 jan. 21 	1968 jan. 30 	1969 fév. 16 	singe
    1909 jan. 22 	1910 fév. 09 	1969 fév. 17 	1970 fév. 05 	coq
    1910 fév. 10 	1911 jan. 29 	1970 fév. 06 	1971 jan. 26 	chien
    1911 jan. 30 	1912 fév. 17 	1971 jan. 27 	1972 fév. 14 	porc
    1912 fév. 18 	1913 fév. 05 	1972 fév. 15 	1973 fév. 02 	rat
    1913 fév. 06 	1914 jan. 25 	1973 fév. 03 	1974 jan. 22 	buffle
    1914 jan. 26 	1915 fév. 13 	1974 jan. 23 	1975 fév. 10 	tigre
    1915 fév. 14 	1916 fév. 02 	1975 fév. 11 	1976 jan. 30 	lièvre
    1916 fév. 03 	1917 jan. 22 	1976 jan. 31 	1977 fév. 17 	dragon
    1917 jan. 23 	1918 fév. 10 	1977 fév. 18 	1978 fév. 06 	serpent
    1918 fév. 11 	1919 jan. 31 	1978 fév. 07 	1979 jan. 27 	cheval
    1919 fév. 01 	1920 fév. 19 	1979 jan. 28 	1980 fév. 15 	chèvre
    1920 fév. 20 	1921 fév. 07 	1980 fév. 16 	1981 fév. 04 	singe
    1921 fév. 08 	1922 jan. 27 	1981 fév. 05 	1982 jan. 24 	coq
    1922 jan. 28 	1923 fév. 15 	1982 jan. 25 	1983 fév. 12 	chien
    1923 fév. 16 	1924 fév. 04 	1983 fév. 13 	1984 fév. 01 	porc
    1924 fév. 05 	1925 jan. 24 	1984 fév. 02 	1985 fév. 19 	rat
    1925 jan. 25 	1926 fév. 12 	1985 fév. 20 	1986 fév. 08 	buffle
    1926 fév. 13 	1927 fév. 01 	1986 fév. 09 	1987 jan. 28 	tigre
    1927 fév. 02 	1928 jan. 22 	1987 jan. 29 	1988 fév. 16 	lièvre
    1928 jan. 23 	1929 fév. 09 	1988 fév. 17 	1989 fév. 05 	dragon
    1929 fév. 10 	1930 jan. 29 	1989 fév. 06 	1990 jan. 26 	serpent
    1930 jan. 30 	1931 fév. 16 	1990 jan. 27 	1991 fév. 14 	cheval
    1931 fév. 17 	1932 fév. 05 	1991 fév. 15 	1992 fév. 03 	chèvre
    1932 fév. 06 	1933 jan. 25 	1992 fév. 04 	1993 jan. 22 	singe
    1933 jan. 26 	1934 fév. 13 	1993 jan. 23 	1994 fév. 09 	coq
    1934 fév. 14 	1935 fév. 03 	1994 fév. 10 	1995 jan. 30 	chien
    1935 fév. 04 	1936 jan. 23 	1995 jan. 31 	1996 fév. 18 	porc
    1936 jan. 24 	1937 fév. 10 	1996 fév. 19 	1997 fév. 06 	rat
    1937 fév. 11 	1938 jan. 30 	1997 fév. 07 	1998 jan. 27 	buffle
    1938 jan. 31 	1939 fév. 18 	1998 jan. 28 	1999 fév. 15 	tigre
    1939 fév. 19 	1940 fév. 07 	1999 fév. 16 	2000 fév. 04 	lièvre
    1940 fév. 08 	1941 jan. 26 	2000 fév. 05 	2001 jan. 23 	dragon
    1941 jan. 27 	1942 fév. 14 	2001 jan. 24 	2002 fév. 11 	serpent
    1942 fév. 15 	1943 fév. 04 	2002 fév. 12 	2003 jan. 31 	cheval
    1943 fév. 05 	1944 jan. 24 	2003 fév. 01 	2004 jan. 21 	chèvre
    1944 jan. 25 	1945 fév. 12 	2004 jan. 22 	2005 fév. 8 	singe
    1945 fév. 13 	1946 fév. 01 	2005 fév. 9 	2006 jan. 28 	coq
    1946 fév. 02 	1947 jan. 21 	2006 jan. 29 	2007 fév. 17 	chien
    1947 jan. 22 	1948 fév. 09 	2007 fév. 18 	2008 fév. 6 	porc
    1948 fév. 10 	1949 jan. 28 	2008 fév. 7 	2009 jan. 25 	rat
    1949 jan. 29 	1950 fév. 16 	2009 jan. 26 	2010 fév. 13 	buffle
    1950 fév. 17 	1951 fév. 05 	2010 fév. 14 	2011 fév. 2 	tigre
    1951 fév. 06 	1952 jan. 26 	2011 fév. 3 	2012 jan. 22 	lièvre
    1952 jan. 27 	1953 fév. 13 	2012 jan. 23 	2013 fév. 9 	dragon
    1953 fév. 14 	1954 fév. 02 	2013 fév. 10 	2014 jan. 30 	serpent
    1954 fév. 03 	1955 jan. 23 	2014 jan. 31 	2015 fév. 18 	cheval
    1955 jan. 24 	1956 fév. 11 	2015 fév. 19 	2016 fév. 7 	chèvre
    1956 fév. 12 	1957 jan. 30 	2016 fév. 8 	2017 jan. 27 	singe
    1957 jan. 31 	1958 fév. 17 	2017 jan. 28 	2018 Fév 15 	coq
    1958 fév. 18 	1959 fév. 07 	2018 fév. 16 	2019 fév. 4 	chien
    1959 fév. 08 	1960 jan. 27 	2019 fév. 5 	2020 jan. 24 	porc

Discussions similaires

  1. [Turbo Pascal] La fonction random : nombre compris entre 1 (pas 0) et 100
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 24/12/2012, 12h55
  2. [Dates] afficher mois et année entre 2 dates
    Par jiojioforever dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2007, 15h24
  3. select en fonction de l'année d'une date
    Par maraly dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/03/2007, 08h51
  4. Différenece en année entre 2 dates ds une requête
    Par solange44 dans le forum Oracle
    Réponses: 1
    Dernier message: 28/09/2006, 15h36
  5. Réponses: 41
    Dernier message: 27/08/2006, 15h17

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