Pour cet été, je vous propose un mini-challenge qui consiste à écrire un programme Python permettant d’afficher une multiplication posée.
Voici un exemple…
from math import log def produit(a,b): m = max(a,b) longueur = int( log(m)/log(10) ) + 1 result = [ a , b ] line = 0 for i in range( int( log(b)/log(10) ) + 1 ): result.append( (b%10) * a * (10**line) ) line +=1 b = b // 10 somme = 0 for i in range(2,len(result)): somme += result[i] result.append(somme) longueur_affichage = int( log( result[-1] )/log(10) ) + 3 formattage = '{:>'+str(longueur_affichage)+'}' formattage2 = '{:>'+str(longueur_affichage-2)+'}' r = '' for i in range( len(result) ): if (i == 2) or (i == len(result)-1): r += '-'*longueur_affichage + '\n' if i == 1: r += '× ' + formattage2.format( result[i] ) else: r += formattage.format( result[i] ) r += '\n' return r
>>> produit(9877,971)
9877
× 971
---------
9877
691390
8889300
---------
9590567
Si vous souhaitez soumettre votre code, insérez-le dans votre commentaire sous la forme:
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="dracula" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">
Votre code Python
</pre>
ceci afin qu’il s’affiche correctement. Il apparaîtra après validation manuelle de ma part.
Le script est très moche mais il fait le boulot. C’est la multiplication posée mais par jalousies.
Ce n’est pas vraiment ce qui est demandé, mais bon… 🙂 Il aurait été dommage de ne pas l’afficher. Pour la curiosité, voici ce qu’il affiche :
La multiplication “par jalousies” est aussi connue sous le nom de multiplication per gelosia.
Oui, ici, je ne sais pas comment afficher le résultat ainsi.
Si on regarde bien, c’est la même que nous mais sans les retenues.
Sinon, voici mon script qui répond à la question, cette fois.
Là, je suis assez jaloux de ce script 🙂 Bien plus concis que le mien… En revanche, je suis moins fan des noms comportant des lettres accentuées pour les fonctions 🙂
On peut obtenir la longueur d’un entier en le convertissant en une chaîne de caractères et de même, on peut obtenir ses chiffres.
Sinon, la ruse est dans le fait d’avoir utilisé la méthode rjust (qui pousse à droite, ljust pousse à gauche) avec un caractère de remplissage posé dès la création de chaque ligne au début de chacune d’elles.
Python accepte les noms accentués (utf8), je ne me prive pas de les utiliser.