Petit soucis en python [Résolu]

A voir également:Petit soucis en pythonN python ✓ - Forum - Python Carré python - Forum - Python Python nombre pair ✓ - Forum - Python Python retour à la ligne code - Forum - Python Lire fichier csv python - Conseils pratiques - Python

Bonjour,

Voila, j'essaie de coder un petit programme qui puisse me permettre de faire un conversion d'une base 10 vers base 16 et vice versa,

J'ai rédigé le programme en langage algorithmique que j'ai testé sur Papier cependant, j'ai des soucis pour le convertir en python,

J'aurais aimé savoir si vous pouviez m'aider en m'apportant un correctif sur la traduction que j'ai faite en python de l'algo s'il vous plait car je butte vraiment et je n'arrive pas à progresser dans mon apprentissage.


Voici le lien du projet, vous trouverez l'algo + ce que j'ai fais en python (PS: je suis une douille en python):

https://drive.google.com/open?id=1APtXNeneJLbBXIqAfdwI7JMnITzum5Se

Merci à l’âme charitable qui m'aidera

Forum

A voir également:Petit soucis en pythonN python ✓ - Forum - Python Carré python - Forum - Python Python nombre pair ✓ - Forum - Python Python retour à la ligne code - Forum - Python Lire fichier csv python - Conseils pratiques - Python

Web: www.shapebootstrap.net

4 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Salut jojol_8144,

En Python, tu as les fonctions int() et hex() faisant partie du langage qui te permettent de faire ces conversions en une ligne.

# -*- coding: UTF-8 -*- chaine_base_10 = "1234567" print("la chaîne", chaine_base_10, "vaut", hex(int(chaine_base_10)), "en hexadécimal") chaine_base_16 = "0x12d687" print("la chaîne", chaine_base_16, "vaut", int(chaine_base_16, 16), "en hexadécimal")

donne :

$ python3 35910791.py la chaîne 1234567 vaut 0x12d687 en hexadécimal la chaîne 0x12d687 vaut 1234567 en hexadécimal $

Vois :
https://docs.python.org/3/library/functions.html#int
https://docs.python.org/3/library/functions.html#hex

Lorsque tu postes sur le forum programmation de CCM, poste ton code et les éléments de ton problème sur le forum, décrit précisément quel est ton problème et illustre le avec un exemple de code montrant le comportement anormal selon toi et indique le comportement attendu.

Sinon : on doit aller nous mêmes à la pêche aux informations, sur un autre site, en ne sachant rien de la nature réelle de ton problème que l'on doit deviner. Les membres du forum répondent en fonction de leurs compétentes, de leur temps libre et de leur motivation, bénévolement. Pour espérer avoir une réponse, tu dois comprendre cela et leur faciliter la tâche.

Le forum permet l'affichage du code avec coloration syntaxique, numérotation des lignes et préservation de l'indentation en postant le code avec les balises <code python>.

Pour cela clique sur la flèche basse à gauche de l'icône image et choisis le langage python. Ensuite copie colle ton code à l'intérieur des balises, comme cela :

<code python>
ton code ici
</code>

Dal

Reply
réponses:
  • auteur

    Bonjour,

    Donc voici mon code:


      from math import pow, log  def convert( unEntier,              old_base,              tHexa,              choix,              position              k,              s,              new_base):      tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] while choix != 'Q' & choix  != 'q':     print("Conversion base 10 en base 16 ............ 1")     print("Conversion base 16 en base 10 ............ 1")     print("Quitter l'application .................... Q")     print("Votre choix :                               ") choix = input("hop hop hop, on fait la sa&sie")  if choix = '1':      print("Entrez un entier naturel = ")      unEntier = input ("saisie de l'entier à convertir ")      unHexa = ""     for unEntier > 0:         unHexa = tHexa [unEntier / 16] + unHexa         unEntier = unEntier / 16     unHexa = input ("valeur hexa =")     else:     if choix = '2':         print("Entrez un hexadécimal = ")         unHexa = input()         k = 0         unEntier = 0         while unHexa > 0:             s = ch ((unHexa, unHexa.size()-1, 1)                     position = 0                     for s !=  tHexa [position]:                         position = position + 1                 unEntier = unEntier + position * 16^k                 unHexa = ch (unHexa, 0, unHexa.size()-1)               k = k + 1              print("valeur décimale = ", unEntier ) 


    je sais qu'il est mauvais, j'aimerais juste un petit correctif de votre part si cela est possible bien sur

    merci d'avance

  • auteur

    Là tu postes ton code (correctement posté, bravo :-), mais tu ne décris toujours pas ton problème.

    Le premier problème évident est que ce code ne peut pas être exécuté par Python en raison d'erreurs de syntaxe. Python te signale ces erreurs de syntaxe, que tu devrais déjà corriger une par une en utilisant les indications fournies par Python.

    Commence par la première :

    $ python 35910791.py
    File "35910791.py", line 10
    k,
    ^
    SyntaxError: invalid syntax

    vois à la ligne 10 ou avant cette ligne ce qui ne serait pas conforme à la syntaxe de Python, et tu verras qu'il manque une virgule dans ta liste de paramètres à la ligne immédiatement au dessus de la ligne 10. Continue jusqu'à ce que ton programme ne comporte plus d'erreurs de syntaxe.

    Commence petit :

    - ajoute un appel à cette fonction avec des paramètres (j'avoue ne pas comprendre pourquoi tu passes tous ces paramètres à la fonction, vu que tu définis leur valeur dans la fonction..., de quels paramètres ta fonction a-t-elle réellement besoin pour être appelée ?) - si tu n'appelles pas la fonction, elle ne s'exécutera pas (tu ne fais que définir une fonction qui ne s'exécute pas)

    - commence avec une fonction sans rien dedans qu'un seul
    print("Je suis dans la fonction")
    et ne comprenant qu'une liste de paramètres réellement nécessaires à l'appel de la fonction, teste cela, et si cela s'exécute sans erreurs de syntaxe et que cela fonctionne comme tu l'attends, passe à la suite

    - ajoute ton menu à la fonction, teste cet ajout, et si cela s'exécute sans erreurs de syntaxe et que cela fonctionne comme tu l'attends, passe à la suite,

    - etc.

    C'est comme cela que l'on réalise un programme dans n'importe quel langage. Lorsque l'on programme, on n'attend pas d'avoir écrit plusieurs dizaines de lignes avant de tester son programme, surtout lorsque l'on est inexpérimenté.

    Fais cela s'il te plaît, et si tu as une erreur de syntaxe ou un bogue à l'exécution que tu ne sais pas corriger, reviens sur le forum en postant ton code modifié dans ce fil de discussion, et en expliquant exactement quelle est l'erreur ou le problème que tu n'arrives pas à corriger ou à résoudre.

    Sois vigilant sur l'indentation de ton code. Si tu veux écrire du code qui fait partie de ta fonction, ton code doit rester indenté dans la fonction.

    Tu devrais commencer par quelque chose de pas plus compliqué que cela :

    # -*- coding: UTF-8 -*-  from math import pow, log  # définition de la fonction (son contenu est délimité par l'indentation) def convert():     print("Je suis dans la fonction")  #exécution de la fonction (indenté hors de la fonction, ne fait pas partie de la fonction) convert()

    Ne rajoute des arguments à la fonction que s'ils sont strictement nécessaires à l'appel de la fonction.

    Dal

  • auteur

    Après vérification, il semble que cela ne marche pas, rien ne vas dans mon prog,

    j'ai pas vraiment de cours, on se contente de nous dire de chercher par nous même, pour être autonome, j'ai tout un tas d'exercice et je n'ai aucun modèle type de correction,

    Je dois attaquer tout un tas d'exos comme ça et je ne connais pas vraiment l'approche à avoir.....

    C'est pour ça que j'ai démarré avec la rédac du prog en langage algorithmique....je ne sais pas si c'est une bonne approche du tout...

    Serait-il me traduire celui-ci en python s'il vous plait ou mon algo n'est pas bon ? j'ai mis le lien de mon algo dans le premier message,

    Cela m'aiderais énormément pour la suite parce-que pour le moment, je patine

    je lis en parallèle les liens qui m'ont été fournis en haut, à défaut d'en avoir un en main

    Merci à ceux qui prennent le temps de m'expliquer

  • auteur

    mon algo:

    programme conversion

    choix : caractère // choix de l'utilisateur dans le menu
    unEntier : entier // entier à convertir en hexa
    unHexa : chaîne // hexa à convertir en entier
    tHexa[0..15] : caractère // vecteur contenant les digits de la base 16
    k : entier // pour gérer les puissances
    s : chaîne // pour récupérer un digit dans l'hexa
    position : entier // pour mémoriser la position du digit dans le vecteur

    debut

    choix ← 'Z'
    // initialisation du vecteur
    tHexa ← {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}

    // boucle sur le menu

    tantque choix <> 'Q' et choix <> 'q'

    // affichage du menu
    et saisie du choix
    ............ 1"
    afficher
    "Conversion
    base
    10
    en
    base
    16

    afficher
    "Conversion
    base
    16
    en
    base
    10
    ............ 2"
    afficher "Quitter l'application .................... Q"
    afficher "Votre choix : "

    saisir choix

    • conversion base 10 en base 16 si choix = '1'

    ◦ saisie de l'entier à convertir afficher "Entrez un entier naturel = " saisir unEntier

    ◦ conversion par divisions successives de 16 unHexa ← ""
    tantque unEntier > 0

    unHexa ← tHexa[unEntier div 16] + unHexa unEntier ← unEntier/16
    fintantque
    ◦ affichage du résultat
    afficher "valeur hexa = ", unHexa

    sinon

    • conversion base 16 en base 10 si choix = '2'
    ◦ saisie de l'hexa à convertir afficher "Entrez un hexadécimal = " saisir unHexa

    ◦ conversion par addition des digits multipliés par les poids k ← 0 // pour les puissances

    unEntier ← 0

    tantque taille(unHexa) > 0
    • extraction du dernier caractère hexa s ← extraire(unHexa, unHexa.size()-1, 1)
    • recherche de la position du caractère dans le vecteur position ← 0
    tantque s <> tHexa[position] position ← position + 1
    fintantque
    • ajout du digit récupéré multiplié par la puissance de 16 unEntier ← unEntier + position * 16k
    • on enlève le dernier caractère

    unHexa ← extraire(unHexa, 0, unHexa.size()-1)

    82940CTPA01 2/4
    k ← k + 1


    fintantque
    // affichage du résultat

    afficher "valeur décimale = ", unEntier

    finsi

    finsi

    fintantque

    fin

  • auteur

    Ton algorithme définit un programme, et non une fonction. Pourquoi veux tu définir une fonction en Python ?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

J'ai pris la peine de te donner une méthodologie, relis mon message précédent (je pense que tu as posté les messages suivants sans lire la totalité de ce que j'ai écris, car j'ai terminé de modifier mon post à 13:38 et c'est à la même heure que tu postais ton algorithme) :

https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#3

Commencer par réfléchir à l'algorithme est toujours une bonne chose, mais tu n'as pas nécessairement besoin de le formaliser de façon aussi détaillée, car tu ne dois utiliser ton algorithme que pour inclure dans ton programme Python la logique que l'algorithme implémente au lieu de tenter de traduire ligne par ligne ce que tu as écris en langage algorithmique qui utilise une syntaxe différente.

Si tu n'as pas à définir une fonction, commence directement ton code par le menu :

# -*- coding: UTF-8 -*-  from math import pow, log  choix = ' ' while choix not in ['Q', 'q', '1', '2']:     print("Conversion base 10 en base 16 ............ 1")     print("Conversion base 16 en base 10 ............ 2")     print("Quitter l'application .................... Q")     choix = input("Votre choix : ")  if choix == 'Q' or choix == 'q':     print("Adios")     exit  if choix == '1':     print("Conversion base 10 en base 16")     # TODO  if choix == '2':     print("Conversion base 16 en base 10")     # TODO


Dal

Reply
réponses:
  • auteur

  • auteur

    d'accord, mais il ne faut pas que je définisse ma liste tHexa d'abord ?

  • auteur

    note que mon exemple de menu ci-dessus corrige un certain nombre d'erreurs et de confusions dans ton code précédent :

    - l'opérateur "et" en Python est

    and
    et pas "&"

    - une affectation en Python se fait avec
    =
    et une comparaison d'égalité avec
    ==
    ...

    - l'indentation est corrigée dans la boucle pour permettre la répétition de la demande de saisie avec
    input()
    et l'indentation est aussi corrigée dans le traitement des choix

  • auteur

    Ah, dans le PDF que j'ai téléchargé, ils me disent que c'est &....par exemple,

    c'est déjà un début.....

    Mais en soi, en prenant en comptes les erreurs de syntaxes, est-ce que je part sur la bonne voie pour mon code ou je suis à l'ouest ?

  • auteur

    en fait j'ai besoin de savoir centaines chose,

    j'arrive pas à traduire ça par ex:

      extraction du dernier caractère hexa s ← extraire(unHexa, unHexa.size()-1, 1) 



    ou encore ça qui est similaire à la ligne précédente:

     unHexa ← extraire(unHexa, 0, unHexa.size()-1) 

  • auteur

    Je pense que ton PDF indique que

    &
    est un opérateur bit à bit faisant un "et" logique (il sert à altérer des bits de données et non pas ajouter des conditions cumulatives à des comparaisons) et que
    and
    est l'opérateur booléen (il sert dans les comparaisons).

    https://www.w3schools.com/python/python_operators.asp

    Si ton PDF te dit autre chose, jette le aux orties.

    d'accord, mais il ne faut pas que je définisse ma liste tHexa d'abord ?

    si tu veux, mais en quoi ta liste tHexa t'est-elle utile pour programmer ton menu et tester son fonctionnement ?

    Tu peux la définir après, n'est-ce pas ? Une fois que tu as vérifié que ton menu fonctionne, tu ajoutes la définition de la liste entre la ligne 10 et la ligne 12, ou avant entre la ligne 3 et la ligne 5 si tu veux, afin qu'elle puisse servir au reste du programme, mais pas avant.

    Ne rajoute à ton programme que ce qui est nécessaire à ce que tu fais et ce que tu veux tester, sinon tu rajoutes de la complexité et des chances d'erreurs inutilement par rapport à ce que tu cherches déjà mettre au point.

    Lorsque tu ajoutes la moindre chose, tu testes tout de suite si tu n'as pas fait d'erreurs de syntaxe et si ton programme continue de faire ce qu'il est sensé faire, ensuite tu ajoutes une autre partie et dès que tu as quelques lignes que tu peux tester, tu le fais, etc.

    Jusqu'à ce que ton programme soit terminé et au point.

    C'est la méthode que j'essaye de faire entrer dans ta tête et que je t'ai indiquée dès ce post : https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#3

  • auteur

    oui, c'est ce que j'ai fais et ça fonctionne merci pour votre aide,

    Mais j'arrive pas à traduire les 2 lignes décrites en haut, pourriez-vous m'aider s'il vous plait ?

  • auteur

    le PDF ne fais mention que de &, aucune allusion à and

  • auteur

    Mais j'arrive pas à traduire les 2 lignes décrites en haut, pourriez-vous m'aider s'il vous plait ?

    Tu ne dois pas traduire ces lignes. Tu dois chercher les fonctionnalités de traitement de chaînes offertes par le langage Python et les utiliser pour faire quelque chose qui produise le même résultat.

    https://www.w3schools.com/python/python_strings.asp

    le PDF ne fais mention que de &, aucune allusion à and

    Je ne sais pas d'où vient ton PDF.

    La documentation officielle de Python3 est là : https://docs.python.org/3/index.html
    Le tutoriel officiel conçu par la Python Software Foundation est là : https://docs.python.org/3/tutorial/

    Celui dont je t'ai donné des liens est très basique et succinct : https://www.w3schools.com/python/default.asp mais au moins il ne comporte pas d'erreurs grossières.

    Dal

  • auteur

    ouais non mais rien ne marche en application sur ce PDF, c'est un pote qui m'a filé ça viens de ses TP de maths

    mais pour faire une extraction comme mentionné ci-dessus, c'est bien ch ?

    et le symbole ← correspond bien à = ?

    Je suis sur les liens fournis, je vais essayer d'évoluer avec cela, c'est plus prudent

  • auteur

    mais pour faire une extraction comme mentionné ci-dessus, c'est bien ch ?

    Je ne connais pas de fonction Python appelée "ch". Il y a, en revanche,

    chr()
    mais qui ne te sert pas à extraire un caractère d'une chaîne ou plutôt une sous-chaîne à partir d'une autre chaîne (il n'y a pas de type caractère à part entière en Python, un caractère est juste une chaîne ayant une taille d'un caractère).

    Pour trouver comment faire, outre https://www.w3schools.com/python/python_strings.asp que je t'ai déjà mentionné et qui est très succinct et simplifié, tu peux voir : https://docs.python.org/3/tutorial/introduction.html#strings

    et le symbole ← correspond bien à = ?

    Je t'ai déjà rappelé quel était l'opérateur d'affectation en Python.

    https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#9

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,
Je me suis remis sur le script mais j'ai un soucis,

Lorsque je saisie un entier, le programme boucle et me renvois dans le menu au lieux de m'afficher le résultat de la conversion:

 # -*- coding: UTF-8 -*-  from math import pow, log  tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] choix = ' ' while choix not in ['Q', 'q', '1', '2']:     print("Conversion base 10 en base 16 ............ 1")     print("Conversion base 16 en base 10 ............ 2")     print("Quitter l'application .................... Q")     choix = input("Votre choix : ")  if choix == 'Q' or choix == 'q':     print("entrez un entier naturel")     unEntier = int(input("saisie de l'entier à convertir "))     unHexa = ""     while unEntier > 0:         unHexa = tHexa [unEntier // 16] + unHexa         unEntier = unEntier / 16 print("valeur Hexa ="+ unHexa)  if choix == '1':     print("Conversion base 10 en base 16")     # TODO  if choix == '2':     print("Conversion base 16 en base 10")     # TODO 

Reply
réponses:
  • auteur

  • auteur

    Bon, j'ai compris mon erreur mais maintenant, j'ai ça:

    Traceback (most recent call last):
    File "C:/Users/jojol/.PyCharmCE2018.3/config/scratches/scratch.py", line 22, in <module>
    unHexa = tHexa[unEntier // 16] + unHexa
    TypeError: list indices must be integers or slices, not float

  • auteur

    le double slash fait une division fournissant un résultat avec des nombres flottants, qui ne peuvent évidemment pas être utilisés comme indices d'une liste.

  • auteur

    Ah, et comment puis-je remédier à cela puisque je désire obtenir un flottant en résultat svp ?

  • auteur

    Travailles-tu en Python 3 ?

  • auteur

    oui

  • auteur

    essayes ceci :

    unHexa = tHexa [int(unEntier // 16)] + unHexa

  • auteur

    je pense que comme tu travailles en Python 3 et que comme la ligne suivante crée un nombre flottant avec

    unEntier = unEntier / 16
    , le résultat de
    unEntier // 16
    dans la boucle doit être un nombre flottant dont la partie après la virgule est tronquée et vaut 0 (par exemple
    10.0
    ), mais de type flottant quand même, ce qui ne plaît pas à Python, car il ne veut que des types entiers pour les indices de liste.

    En faisant
    int(unEntier // 16)
    tu demandes à Python de transformer le résultat en type entier qui ne serait plus
    10.0
    mais
    10
    dans notre exemple et deviendrait utilisable comme indice de liste.

  • auteur

    sinon, je te rappelle que les fonctions

    hex()
    et
    int()
    de Python peuvent te permettre de faire des conversions de chaînes représentant des entiers et de les afficher sous forme de nombres en base hexadécimale, et réciproquement de convertir des chaînes représentant des nombres hexadécimaux et de les convertir sous forme de nombres en base 10, en une ligne pour chaque opération, comme je te l'ai montré là :

    https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#1

    et sans te compliquer la vie avec ce que tu essayes de faire

  • auteur

    Super, ça fonctionne merci,

    Il ne me manque plus qu'a réaliser l’opération inverse

  • auteur

    rebonjour, j'ai voulus terminer mon programme mais j'obtiens cette erreur:

    Traceback (most recent call last):
    File "C:/Users/user/.PyCharmCE2018.3/config/scratches/scratch.py", line 22, in <module>
    unHexa = tHexa [int(unEntier // 16)] + unHexa
    IndexError: list index out of range


    est-ce normal svp ?

    EDIT: J'ai compris mon erreur

  • auteur

    J'ai un nouveau soucis:

    quand je rédige mon code, j'ai cette erreur:

     # -*- coding: UTF-8 -*-  from math import pow, log  tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] choix = ' ' while choix not in ['Q', 'q', '1', '2']:     print("Conversion base 10 en base 16 ............ 1")     print("Conversion base 16 en base 10 ............ 2")     print("Quitter l'application .................... Q")     choix = input("Votre choix : ")  if choix == 'Q' or choix == 'q':  exit 1 if choix == '1':     print("Conversio1n base 10 en base 16")     print("entrez un entier naturel")     unEntier = int(input("saisie de l'entier à convert1ir "))     unHexa = ""     while unEntier > 0:         unHexa = tHexa [int(unEntier // 16)] + unHexa         unEntier = unEntier / 16 print("valeur Hexa =" + unHexa)  if choix == '2':     print("Conversion base 16 en base 10")     print("entrez un Hexadécimal")     k = 0     unEntier = 0     while len(unHexa) > 0:     ^ SyntaxError: invalid syntax 

    pourriez-vous m'aider à savoir ce qui ne vas pas svp ?

  • auteur

    Up

  • auteur

    Le

    print("valeur Hexa =" + unHexa)
    en ligne 11 n'est pas indenté dans le
    if
    .

    Lorsque l'utilisateur tape
    '2'
    ,
    unHexa
    n'est jamais définit dans le flux d'exécution, puisqu'il ne l'est que dans le
    if choix == '1':
    dans ton code.

    Donc, lorsque l'exécution parvient à
    print("valeur Hexa =" + unHexa)
    , Python ne sait pas ce qu'est
    unHexa
    . Cela devrait se résoudre en corrigeant l'indentation de cette ligne.

    De même, une fois que tu auras corrigé l'indentation, lorsque l'exécution parviendra à
    len(unHexa)
    en ligne 31, Python ne saura pas plus ce qu'est
    unHexa
    , pour les mêmes raisons.

    Aussi, tu affiches un message qui demande une saisie en ligne 28, mais tu n'insères aucun code gérant cette saisie.

    Il y a aussi un 1 qui se balade en ligne 15 et qui ne fait rien de spécial (et il y a aussi des 1 qui se baladent dans le texte affiché).

    Lorsque je teste ton programme avec l'option 1, et que je tape
    10
    , le programme devrait afficher
    a
    . Ce n'est pas le cas chez moi.

  • auteur

    Bonjour, j'ai apporté les modifications suivante en vain:

     # -*- coding: UTF-8 -*-  from math import pow, log  tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] choix = ' ' while choix not in ['Q', 'q', '1', '2']:     print("Conversion base 10 en base 16 ............ 1")     print("Conversion base 16 en base 10 ............ 2")     print("Quitter l'application .................... Q")     choix = input("Votre choix : ")  if choix == 'Q' or choix == 'q':     exit  if choix == '1':     print("Conversio1n base 10 en base 16")     print("entrez un entier naturel")     unEntier = int(input("saisie de l'entier à convert1ir "))     unHexa = ""     while unEntier > 0:         unHexa = tHexa [int(unEntier // 16)] + unHexa         unEntier = unEntier / 16         print("valeur Hexa =" + unHexa)  if choix == '2':     print("Conversion base 16 en base 10")     print("entrez un Hexadécimal")     unHexa = int(input("saisie de l'entier à convert1ir "))     k = 0     unEntier = 0     while len(unHexa) > 0: 


    j'obtiens cette erreur et le prog ne marche toujours pas:

      File "C:/Users/user/.PyCharmCE2018.3/config/scratches/scratch.py", line 33

    ^
    SyntaxError: unexpected EOF while parsing

    Process finished with exit code 1


    pourriez-vous m’aider en corrigeant les erreurs que vous observez ou non s'il vous plait ?

    je galère sur ce devoir depuis plus d'une semaine....

    EDIT:

    J'ai plus d'erreur mais le résultat voulus n'est semble-t-il pas présent

  • auteur

    Je t'ai déjà donné un code tout fait qui fait cela en utilisant Python comme tu devrais l'utiliser dans la vraie vie pour faire ce type de conversions en pratique.

    https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#1

    Depuis le début, tu ignores cette réponse, et tu ne l'utilises pas, et j'en ai déduis que ton problème était manifestement un devoir, ce que tu viens de confirmer, et je ne suis pas là pour faire ce devoir à ta place.

    https://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm

    Je t'explique le pourquoi des erreurs que tu constates pour que tu puisses comprendre et corriger par toi même.

    Désormais, dans ton code, la ligne 24 est indentée avec le

    while
    et non avec le
    if
    comme je te le suggérais, et tu n'as certainement pas l'affichage attendu à l'exécution. Réduit cette ligne d'une indentation pour l'aligner avec le
    if
    si ce que tu veux faire c'est un seul affichage final en fin de boucle. Cela dit.. afficher le contenu produit par la boucle à chaque itération un aussi un bon moyen de te rendre compte que ta boucle est fausse..

    Quant à l'erreur "unexpected EOF while parsing" est est normale tant que tu n'as rien mis dans la dernière boucle
    while
    après les deux points, ton programme étant incomplet. Python se plaint naturellement de ne pas disposer de la suite pour savoir quoi mettre dans la boucle.

    Dans l'option 1, ton programme ne passe pas un test simple de la saisie de "10" et de l'affiche de "a".

    A ton avis, si unEntier vaut
    10
    , que vaut sa division entière par 16 que tu effectues en faisant
    unEntier // 16
    ? Est-ce bien ce que tu cherches à faire ? N'est-ce pas plutôt le reste de la division entière par 16 qui t'intéresse ? Quel est l'opérateur Python permettant d'obtenir le reste de la division entière ?

    Met au point cette partie de ton programme avec une valeur de
    10
    , qui ne devrait représenter qu'une itération de la boucle et afficher
    a
    , essaye ensuite avec
    255
    qui devrait donner
    ff
    et faire deux itérations de boucle, etc. si tu ne testes pas le programmes que tu écris, et que tu ne débogues pas ton programme, tu ne programmes pas, tu imagines que tu fais quelque chose alors que le programme fait autre chose.

  • auteur

    oui c'est un devoir j'avais précisé que j'avais tout un tas d'exos de ce type à faire (des TP si vous préférez)
    je regarde ça

  • auteur

    J'ai essayé de faire ça:

     tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] print("entrez un entier naturel") unEntier = int(input("saisie de l'entier à convertir ")) unHexa = "" print("la chaîne", unEntier, "vaut", hex(int(unEntier)), "en hexadécimal") 


    et j'obtiens ceci:

    entrez un entier naturel
    saisie de l'entier à convertir 10
    la chaîne 10 vaut 0xa en hexadécimal

    Process finished with exit code 0

    entrez un entier naturel
    saisie de l'entier à convertir 255
    la chaîne 255 vaut 0xff en hexadécimal

    Process finished with exit code 0



    Cela signifie bien que la conversion fonctionne svp ?

    et que tout ce que j'ai essayé de faire avec les division est inutile svp ?

    EDIT:

    En fait si ça fonctionne aussi avec ça:

             unHexa = tHexa[unEntier % 16] + unHexa             unEntier //= 16     print("valeur Hexa =" + unHexa) 


    Merci

  • auteur

    jojol_8144,

    Python permet de convertir très facilement, comme tu le vois et comme je te l'avais montré dès mon premier message (et tu n'as pas besoin de la liste

    tHexa
    et si tu as déjà convertit la saisie en
    int
    en ligne 3, tu n'as pas à le refaire en ligne 5).

    Un programmeur Python ne se casserait pas la tête à essayer de refaire ce que font déjà les fonctions intégrées au langage. Il utiliserait les fonctions intégrées au langage, qui sont programmées correctement et "fonctionnent" conformément à leur documentation. Si l'objet de l'exercice est de faire un programme comme le ferait un programmeur Python, alors un code utilisant les fonctions
    int()
    et
    hex()
    intégrées au langage ne me paraît pas déplacé.

    Maintenant, si l'objet de l'exercice est de mettre en oeuvre un algorithme qui fait les conversions, en montrant non seulement que tu sais concevoir un tel algorithme, mais aussi que tu sais utiliser des listes, des boucles, des conditions, des indices de listes, les opérateurs modulo et de division entière, etc., l'objet de l'exercice est différent.

    Je ne peux pas répondre à ta place sur la question de savoir si tout ce que tu as essayé de faire avec les divisions est inutile (sur le plan de l'apprentissage, cela ne l'est certainement pas, car cela a dû te faire progresser dans la compréhension de ce langage).

    En tout cas, en l'état, ton code précédent https://www.commentcamarche.net/forum/affich-35910791-petit-soucis-en-python#32 ne fait pas ce qu'il est sensé devoir faire car il n'implémente pas correctement l'algorithme qui ferait cette tâche.

  • auteur

    Merci pour votre patience,

    en tout cas cela semble fonctionner correctement avec les 2 version

    Je vais pouvoir passer au TP suivant, ouf

  • auteur

    Bravo !

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

its nice topic

http://www.javaonexperiance.com/python-tutorials/python-string-tutorials.html
Python Strings

Reply
réponses:
  • auteur

    <a href="http://www.javaonexperiance.com/python-tutorials/python-string-tutorials.html">Python String</a>

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed