Programme de conversion en Python

Bonjour,

J'aimerais écrire un programme en python dans le quel nous entrons un nombre entier positif (décimal ou binaire ou hexadécimal) et qui sera convertis en décimal/binaire/hexadécimal.

Soit
entrer un décimal, le convertir en binaire et en hexadécimal
ou
entrer un binaire, le convertir en décimal et en hexadécimal
ou
entrer un hexadécimal, le convertir en décimal et binaire.

Je suis débutante en programmation, et je dois avouer que ce programme me prend vraiment la tête et donc que j'ai envie de trouver la solution.

Merci à ceux qui prendront le temps de m'aider

1 réponse

  1. Contributeur
    Salut, je vais pas faire l'exo à ta place mais te donner quelques pistes:
    En premier lieu il faut que l'utilisateur précise la base du chiffre (10, 2 ou 16):
    1101001 est un nombre binaire mais aussi décimal et hexadécimal, et on ne peut pas détecter tout seul de quelle base il s'agit.

    À partir d'un string, on peut avoir un int selon une base:
    nombre = int(string, base)
    où, dans ce cas, base vaudra 10, 2 ou 16 selon le choix de l'utilisateur.
    Et dans l'autre sens,
    format(nombre, format)
    peut te convertir les nombres selon format:
    - 'b', binaire
    - 'o', octal
    - 'd', décimal
    - 'h', hexadecimal
    1. Je comprends ce que tu me dis.

      J'aimerais faire une base téléphonique, si on veut ça, on tape ça. Forcément, j'ai une idée en français, mais la traduction est très compliquée.

      Entrer un nombre, donner la base de ce nombre, puis demander à ce qu'il soit convertis dans les deux autres bases. Mais j'ai vraiment pas le début, est ce que je devrais utiliser une fonction? Ou peut être que c'est inutile ? Je commence par définir mes bases ? Quelle est l'utilité d'un string ? (la programmation est nouvelle depuis quelques semaines, c'est un choix que je regrette au jour d'aujourd'hui car les débuts sont vraiment difficiles...)
      J'espère que tu accepteras de m'aider encore un peu. En tout cas, merci !
    2. Contributeur
      "est ce que je devrais utiliser une fonction": pour l'entrée utilisateur? Sur Python 2.x il faut se servir de
      raw_input
      et sur 3.x,
      input
      .
      "définir mes bases": c'est pas obligatoire, ça peut s'écrire directement dans le code, mais comme Python aime le joli code, on peut utiliser un dictionnaire pour
      format
      :
      bases = {2: 'b', 10: 'd', 16: 'h'}
      , peut-être que tu t'en serviras (ou pas, ça dépend comment tu implémentes ton programme)
      "utilité d'un string": string veut dire chaîne, en l'occurence c'est une chaîne de caractères, comme ça par exemple:
      "Bonjour je suis une chaîne"
    3. Merci beaucoup

      OK pour input et string, un peu de mal à remettre chaque utilité.

      Est ce que tu pourrais m'aider pour le point de départ, s'il te plait ? Car je ne pas vraiment où aller.

      d=imput("décimal")
      b=input("binaire")
      h=input("hexadécimale")

      n=input("entrer un nb entier à convertir")
      input("donner la base de ce nombre entier")
      input('convertir ce nb",d,b,h)

      Est ce que je peux utiliser les fonctions bin et hex ? (je n'ai pas trouvé pour décimal)

      Je suis consciente qu'il me manque beaucoup de choses mais je n'arrive pas a mettre les choses dans l'ordre...
    4. Contributeur
      Pour le début, demande plûtot la base sous la forme suivante:
      caractere_base = input("Quelle base? b: binaire, d: decimale, h: hexadecimale")
      , puis vérifie ce qui a été entré par
      if caractere_base == 'b':
      , puis pour 'd' et 'h', et associe
      nombre_base
      à la base, en vrai chiffres (un int).
      A partir de là, sers-toi de ces deux variables pour convertir dans un sens et dans l'autre.
    5. Encore une fois, merci !

      ah oui, j'ai oublié cette étape car tout s'est effacé la première fois :

      if caractere_base == "b":
      return d
      return h

      même chose pour les 2 autres solutions

      est ce que ça peut aller de cette facon? (je n'ai pas python sur cet ordinateur, je ne peux pas tester sur le moment du coup)