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 :

besoin d'aide pour un petit programme (sympa ce forum quoi qu un peu vieux non?)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Par défaut besoin d'aide pour un petit programme (sympa ce forum quoi qu un peu vieux non?)
    Bonjour à tous,alors tout simplement je cherche à créer un programme qui permet d'écrire une tablature pour bass. j'en suis encore loin de l'état final et j'ai codé le tout un peu salement.
    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
    with open("File.txt", 'r+') as file:#ouvrir fichier pour tout rapporter après
        for bigloop in range(2):#noter jusqu'a range(X) notes
            Fret=bytearray(input("Entrer la case").encode('utf-8'))# en byte pour changer des chaines
            corde=int(input("puis sa corde correspondante"))#récupérer les données
            Annulation="-".encode('utf-8')# mettre ce que on veux sur une seule corde
            G="GDAE"# imprimer les notes de cordes à vides
            vide=bytearray("--".encode('utf-8'))#variable qui peut être changer en 1 point 
            X=0
            i=1
            for loop in range(4):
                if i == 1:
                    if corde == 1:
                        vide[1] = Fret[0]# on tente d'imprimer sur la corde 1 la case
                if i == 2:
                    if corde == 1:
                        vide[1] = Annulation[0] # oublier le if au dessus
                    if corde == 2:
                        vide[1] = Fret[0]
                if i == 3:
                    if corde == 2:
                        vide[1] = Annulation[0] 
                    if corde == 3:
                        vide[1] = Fret[0]# on tente d'imprimer sur la corde 3 la case 
                if i == 4:
                    if corde == 3:
                        vide[1] = Annulation[0] 
                    if corde == 4:
                        vide[1] = Fret[0]
                print(G[X], end=" ")#imprimer l'accord de la corde vide
                print(vide.decode(), end='')# imprimer la corde
                print("-|")
                if bigloop < 1:
                    file.write(G[X])
                file.write(vide.decode())
                file.write('\n')
                if bigloop == 2:
                    file.write("-|")
                X=X+1
                i=i+1
        print(" ")
    file.close()
    mon problème est que en sortie j'obtient si je rentre par exemple 1 à la corde 2 et 1 à la corde 4 ceci:
    G--
    D-1
    A--
    E--
    --
    --
    --
    -1
    au lieu de ça:
    G-----|
    D-1---|
    A-----|
    E---1-|
    Je ne comprends pas la manip à faire pour tout rédiger sur la bonne ligne et aussi la fin:"-|"ne s'affiche pas. Merci d'avance les ingénieurs informaticiens!

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Vienrapideux Voir le message
    mon problème est que en sortie j'obtient si je rentre par exemple 1 à la corde 2 et 1 à la corde 4 ceci:
    G--
    D-1
    A--
    E--
    --
    --
    --
    -1
    au lieu de ça:
    G-----|
    D-1---|
    A-----|
    E---1-|
    Voici ce que ça donne chez-moi à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Entrer la case1
    puis sa corde correspondante2
    G ---|
    D -1-|
    A ---|
    E ---|
    Entrer la case1
    puis sa corde correspondante4
    G ---|
    D ---|
    A ---|
    E -1-||
    ce qui me semble bien correspondre à ce que tu veux...

    Citation Envoyé par Vienrapideux Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with open("File.txt", 'r+') as file:#ouvrir fichier pour tout rapporter après
        for bigloop in range(2):#noter jusqu'a range(X) notes
     ...
               file.write('\n')
                if bigloop == 2:
                    file.write("-|")
    et aussi la fin:"-|"ne s'affiche pas.
    Peut-être parce que
    1. tu écris '\n' (fin de ligne) avant le "-|'
    2. bigloop n'est jamais égal à 2
    ...

    Maintenant quelques conseils
    • t'as bien pigé le souci des encodings (avec tes encode) mais en interne prend l'habitude de bosser en unicode car c'est ce qu'il y a de plus naturel en P3. Autrement dit, tes truc=byterarray("...".encode("utf-8")) t'auras tout avantage à les transformer en truc="...". En fait, pour ne pas avoir de souci, il faut travailler en unicode en interne, transformer tout ce qui entre en unicode le plus tôt possible, et transformer tout ce qui sort dans le codage final (ascii, utf8, etc) le plus tard possible.
    • Le print() sous Python 3 s'est enrichi d'une fonctionnalité intéressante: le fait de pouvoir écrire dans un fichier via le paramètre "file=". Autrement dit, écrire print("toto") écrit "toto" à l'écran et with open("...", "r") as fp: print("toto", file=fp) écrit "toto" de la même façon (donc avec le "\n" qui va bien) dans le fichier "fp".
      Donc tu peux, si tu veux écrire un truc à la fois à l'écran et dans un fichier, boucler sur les deux flux
      Code python : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      with open("...", "r") as fp:
          for flux in (sys.stdout, fp):
             print("...", file=flux)
    • accessoirement évite certains tokens (file, dir, etc) pour tes noms de variables car Python les utilise aussi en interne. Ce n'est pas que tu peux pas le faire, mais par exemple écrire with open("..."), "r" as file: print("...", file=file) n'est pas forcément des plus lisibles et les éditeurs Python colorisent ces tokens d'une certaine façon ce qui les fait ressortir inutilement dans le code


    Citation Envoyé par Vienrapideux Voir le message
    sympa ce forum quoi qu un peu vieux non?
    Oui et alors ? Etre/ne pas être vieux est-il un critère d'incapacité/de qualité pour un forum ?
    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]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    [*]Le print() sous Python 3 s'est enrichi d'une fonctionnalité intéressante: le fait de pouvoir écrire dans un fichier via le paramètre "file="
    Elle existait déjà sous une forme C++ like: print >> sys.stdout, 'toto'.

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

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Vienrapideux Voir le message
    ...sympa ce forum quoi qu un peu vieux non?...
    Il ne te reste plus qu'à te faire aider par plus jeune que toi...

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par Vienrapideux Voir le message
    j'ai codé le tout un peu salement.
    C'est peu de le dire ! Ca m'étonne pas après que vous n'arrivez pas à déboguer votre truc !

    Je n'ai pas fait la sortie fichier qui se fait en 2 lignes après ce code, mais je vous conseille déjà d'étudier comment est fait ce code ci dessous que je vous propose, pour le comprendre et vous rendre compte que dans votre code il y a juste plein de trucs parasites qui servent à rien et qui augmentent considérablement la probabilité d'écrire un bog !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cordes = ["G","D","A","E"]
    for bigloop in range(2):
        Fret=input("Entrer la case: ")
        corde=int(input("puis sa corde correspondante: "))-1   ### car python demarre la numerotation à 0
        for i in range(4):
            if i == corde :
                cordes[i]+= '-'+Fret+'-'
            else :
                cordes[i]+= '---'
            print(cordes[i]+'|')

Discussions similaires

  1. [Python 3.X] Python: besoin d'aide pour un petit programme
    Par Intrepid13 dans le forum Général Python
    Réponses: 9
    Dernier message: 14/10/2015, 19h19
  2. [Python 3.X] Python: besoin d'aide pour un petit programme
    Par Intrepid13 dans le forum Général Python
    Réponses: 2
    Dernier message: 11/10/2015, 04h21
  3. Aide pour un petit programme
    Par multeamage dans le forum C++
    Réponses: 13
    Dernier message: 19/08/2006, 17h36
  4. Besoin d'aide pour un petit programme
    Par Nico35 dans le forum C
    Réponses: 13
    Dernier message: 25/05/2006, 22h21
  5. Réponses: 2
    Dernier message: 06/05/2006, 15h09

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