Bonsoir à tous, je suis en pleine apprentissage du langage python, je m'attaquais à quelques algo de base tel que des convertion de décimal-> binaire, binaire-> décimal...
J'ai réussi a faire l'algo décimal->binaire
a_2=""
a_10c = input("Nombre décimal à transposer :")
a_10 = int(a_10c)
while a_10 != 0 :
r=a_10%2 #permet d'avoir le reste de la division
a_2= str(r)+a_2 #permet de concaténer les deux chaines
a_10=a_10//2
print(a_10c, " base 10 =", a_2, " base 2")
A présent et cela fait déjà plusieurs jours que je suis sur le convertisseur binaire -> décimal mais impossible de le finir... (impossible de trouver la solution à ce problème)
Pourriez vous m'expliquer comment en faire un, que je ne reste pas bloqué à cette si petite étape.
Bonsoir et merci pour ta réponse, effectivement ton site est fort utile concernant les algo, mais je ne vois pas le rapprochement avec un langage python.
Les explications donné par ton lien renvoi sur un algo en C (du moins pour ma part, quand je vois ces explications, je sais les éxécuter en C mais non en python...).
Concernant l'algo en python j'avais pensais à faire quelque chose du style :
a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
chaine= "1248"
chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8',
len(chaine)
print(a_2c, " base 2 =", a_10, " base 10")
voici mon idée je suis passé par la variable chaîne en considérant celle ci comme un tableau, et len(chaine) qui renvoie à la longueur de ce "tableau"...
Malheureusement je suis toujours bloqué et je ne vois pas d'issu à mon problème.
je suis en pleine apprentissage du langage python, je m'attaquais à quelques algo de base tel que des convertion de décimal-> binaire, binaire-> décimal...
Python est un langage de haut niveau et si ton but est d'apprendre Python, il ne paraît pas judicieux de s'entraîner avec ce genre d'algorithme. Python te permet nativement de faire ces conversions :
Bonsoir et merci pour ta réponse, effectivement ton site est fort utile concernant les algo, mais je ne vois pas le rapprochement avec un langage python
Un algorithme est utile pour tout type de langage, c'est la façon de faire te permettant d'arriver au résultat.
Maintenant si tu veux simplement utiliser la force de python,
j'ai donc abandonner mon idée de passer par les variables chaine et len, même si j'aurai bien voulu savoir le faire
Comme a dit candide, python est un langage de haut niveau...Bien que j'en aurai besoin pour l'année prochaine (car je souhaite faire un BTS informatique)
Concernant l'algo en python j'avais pensais à faire quelque chose du style :
a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
chaine= "1248"
chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8',
len(chaine)
print(a_2c, " base 2 =", a_10, " base 10")
Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ? Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.
Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ?
Je vais tenter de faire ce que tu me dis on verra bien
Citation : candide
Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.
Pour apprendre le python, je me sert de tout ce que je trouve, cours, tuto, explication d'algo...
J'aime tout ce qui est informatique et plus particulièrement ce qui est développement et codage, c'est pour cela que j'en fait en ce moment, pour avoir la main l'année prochaine.
Citation : fred1599
Citation
j'ai donc abandonner mon idée de passer par les variables chaine et len, même si j'aurai bien voulu savoir le faire
Mieux vaut ne pas abandonner, surtout si tu veux faire info par la suite.
Je n'ai pas abandonne le projet de faire cette algo, j'ai juste pense a plus simple
Je n'ai pas abandonne le projet de faire cette algo, j'ai juste pense a plus simple
L'essentiel est qu'il soit fonctionnel, que tu puisses le terminer, que le résultat attendu soit là.
Par la suite ton code sera une base améliorable en vitesse, lisibilité, etc...
Mais quand je vois ton code, je suppose que tu voulais travailler avec des indices et dans ce cas il faut continuer de travailler avec des chaînes de caractères.
Dans ton cas, il sera plus simple d'indiquer sur le forum ton algo et ensuite de le traduire en python, on pourra plus facilement t'expliquer l'adéquation entre les 2 formes.
Salut salut, desolé du méga up de 2ans, mais je suis tombé ici par hasard et je vous propose ma solution avec explication, je pense que c'est un peu un problême recurant
#Converti une liste en binaire vers un nombre décimal
def convertBinaire(binaire):
# La valeur en base de 10 du nombre binaire
nombre = 0;
# La longueur de la liste binaire, [1, 0] renvoie 2.
longueur = len(binaire)
for i in range(0, longueur):
if(binaire[i] != 0 and binaire[i] != 1):
nombre = 0;
break;
nombre += binaire[longueur - 1 - i] * (2**i)
return nombre;
nombre += binaire[longueur - 1 - i] * (2**i)
Exemple concret:
'1001' en binaire, est égal à : ' 1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3
soit 9. C'est comme cela qu fonctionne le binaire, c'est un peu sous forme de suite (ceci a valu des recherches papiers).
Le soucis de ma méthode c'est que sa passe par une liste, à vous de voir apres pour convertir une chaine de caracteres ou un nombre en liste
l'as très bien dis il y a possibilité de passer par une suite mais si tu voulais rester sur ton idée de chaîne de caractère je t offre mon programme il peut être améliorer et c'est un peu tard mais pour les autres internautes .....
voila mon programme:
# Conversion d'un nombre binaire sous forme de chaine de caractère vers
#un nombre décimal.
def Bindec (nbbin) :
"""Entrez une chaîne de caractères"""
#Déclaration et initialisation de la valeur de retour
nbdec=0
for i in range (len(nbbin)):
nbdec+=int((nbbin[len(nbbin)-(i+1)]))*(2**i)
return nbdec
voila et désolé pour la mise en page je ne savais pas faire autrement
Concernant l'algo en python j'avais pensais à faire quelque chose du style :
a_10=""
a_2c = input("Nombre binaire à transposer :")
a_2 = int(a_2c)
while a_2 != 0 :
chaine= "1248"
chaine[0] == '1', chaine[1] == '2', chaine[2] == '4', chaine[3] == '8',
len(chaine)
print(a_2c, " base 2 =", a_10, " base 10")
Quand je vois ce genre de code, je me dis : saurais-tu faire un code qui calcule la somme des entiers d'une liste d'entiers (sans utiliser la fonction standard sum) ? Pour en revenir à ton choix de faire des conversions de bases, apprendre un langage en s'entraînant avec des algorithmes mathématiques ne me paraît pas une bonne idée.
et si on demande pour la conversion decimale -> binaire de 0 ?
n=int(input('saisissez un nombre')) #demande à l utilisateur de saisir un nombre
resultat=0 #définit une variable resultat et lui donne la valeur 0
nchaine=str(n) #définit une variable nchaine qui converit le nombre saisit en chaine de caractères
nliste=list(nchaine) #définit une variable nliste qui convertit la chaine de caractaire en liste
pgexposant=len(nliste) #définit une variable pgexposant qui compte le nombre de caractères dans la liste
for i in range(pgexposant): #repéte cette boucle pgexposant fois
int(i) #définit i comme etant un nombre entier
ajout=int(nliste[i])*2**(pgexposant-1-i) #définit une variable ajout qui est égale à la iéme valeur de la liste de caractères fois 2 puissance pgexposant -1 - le nombre de fois que la boucle a été jouée
resultat=resultat+ajout #à chaque boucle la variable resultat est égale a la variable ajout + la variable reslultat
print(n,'en nombre binaire vaut',resultat,'en nombre décimal') #renvoit le nombre convertit en decimal
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
143f38ef8e977c44d9f442e8d47ae306