Aller au contenu

ร‰crire les entiers sans les chiffresโš“๏ธŽ

Supposons que le clavier devant nous soit abรฎmรฉ : aucune des touches permettant de saisir des chiffres ne fonctionne ! Comment faire pour reprรฉsenter les entiers ? Pour les additionner et les multiplier ? Les soustraire ?

On choisit tout d'abord de reprรฉsenter zรฉro par un tuple vide ZERO = tuple().

On fournit de plus la fonction successeur qui prend la reprรฉsentation d'un entier n en argument et renvoie celle de son successeur n+1 :

๐Ÿ Script Python
def successeur(n):
    return (n,)

Remarque

L'appel successeur(ZERO) renvoie ((),) qui reprรฉsente donc le nombre UN.

On ne demande pas de travailler avec ces notations sous forme de tuples.

Avec ces deux รฉlรฉments, valeur de dรฉpart ZERO et fonction successeur, il est possible de reprรฉsenter tous les entiers.

๐Ÿ Console Python
>>> ZERO = tuple()
>>> UN     = successeur(ZERO)
>>> DEUX   = successeur(UN)
>>> TROIS  = successeur(DEUX)
>>> QUATRE = successeur(TROIS)
>>> CINQ   = successeur(QUATRE)
>>> SIX    = successeur(CINQ)
>>> SEPT   = successeur(SIX)
>>> HUIT   = successeur(SEPT)
Remarque

La fonction successeur et les ยซ entiers ยป dรฉfinis ci-dessus sont directement accessibles dans le corps du programme. Il est inutile de les retaper.

Vous devez complรฉter trois fonctions addition, multiplication et soustraction ci-dessous prenant chacune en arguments les reprรฉsentations a et b de deux entiers et renvoyant respectivement leur somme (a plus b), leur produit (a fois b) et leur diffรฉrence (a moins b).

Les valeurs de a et b ne devront pas รชtre modifiรฉes lors du traitement.

Les calculs sur les entiers ne seront effectuรฉs qu'ร  l'aide de la fonction successeur et des fonctions codรฉes prรฉcรฉdemment.

Attention

Si b est plus grand que a, la diffรฉrence ยซ a moins b ยป n'est pas possible dans l'ensemble des entiers positifs.

Dans ce cas, la fonction soustraction lรจvera une erreur liรฉe ร  une valeur incorrecte. Pour ce faire, on utilisera l'instruction raise ValueError.

Exemples
>>> addition(UN, UN) == DEUX
True
>>> addition(TROIS, DEUX) == CINQ
True
>>> multiplication(ZERO, CINQ) == ZERO
True
>>> multiplication(DEUX, TROIS) == SIX
True
>>> soustraction(CINQ, TROIS) == DEUX
True
def addition(a, b):
...
def multiplication(a, b):
...
def soustraction(a, b):
...
# Tests
# un + un == deux
assert addition(UN, UN) == DEUX
# trois + cinq == huit
assert addition(TROIS, DEUX) == CINQ
# zรฉro * cinq == zรฉro
assert multiplication(ZERO, CINQ) == ZERO
# deux * trois == six
assert multiplication(DEUX, TROIS) == SIX
# cinq - trois == deux
assert soustraction(CINQ, TROIS) == DEUX
# trois - cinq -> Opรฉration impossible
try:
soustraction(DEUX, CINQ)
except ValueError:
pass
ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”ื”
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(Dรฉs-)Active le code aprรจs la ligne # Tests (insensible ร  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein รฉcran"
(Esc)
rounded
>>> 
 
x
x
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activรฉ, le texte copiรฉ dans le terminal est joint sur une seule ligne avant d'รชtre copiรฉ dans le presse-papier
ร‰valuations restantes : 5/5
.128013_m1XeC0kfp;ZI/UQ8rbรฉoRw=+ vhd9t3-nc.Ns7!aPSgA5(OVuE)lT*x4q,zD26y:i050D0f0F0P0=0#0M0A0J0#0P0M0M0y010F0=0k010406050M0Y0c0c0P0s0:040R0v0#0Y160v0I0A020P0c0k0l0A0w0f1g0s0*0Y0f0M050o1d1f1h1j1b0k04051O1H1R0o1O1b0D0=0B0~1012140C0=0S0C0#1)0C0F19050_0t0#0f1!1113011(1*1,1*0F1=1@1:0F0s1P0F0C0~1m0M0k0P0I140.011_1$010j0{0f0I1u0f1:2c2e2j1{2m1@2p0c2r040a0A0Q0s0v0k0v0M0=1p1r0@2a0s0s0f0J2M1H2t0I1P0o282Y2527261;0D2v141,0I2o2J1:1X1Z0 1`2,0=2.0I0v2=1:0k2R1P2W2Y331c2d1r2@2k2|0s1g0#190A0d2V371a362u391{3b3d3f0.3i2e3k2W2+013p0P3e040A0G3t2X1b3w3n143z3B0A0)3F3v373x3L3f0U3P3H3R3J3y0v3c3A3f0/3W3l381#3o3#3q3C0N3*3I3-3K3/3%3C0r3?3Y3^3!3$3M0E3~3m403T040d0h453,2^413:0d3h1I3j3X464e480d3s4j3u4l4d3a3`3B0d3E4r3G3+3S4w190d3O4A3Q4m4v424F3V4I4t4D4M493)4P4C3Z4o3=4V3@4n4E493}4!3 4$4S0d444*4K3.4S0.4b4:4u4=3:0.4i334Q4X4%0.4q4 4W47524z554#4L4|4H5a4+5c3{0.4O5f4;3_4?4U5l4`5n4|4Z5q4R4|4)5v514?4/5z574S0G4^5D4,3:0G4~4k565J3{0G545N5b4{5Q595T5g5V3B0G5e5Y5m4f5Q5k5(5r5*5#5p5-5w5Q5u5=5A5K5y5_5E5K5C5}5P3B0)5H615h635M4s5O67190)5S6a5U5s3{0)5X6g5Z6i635%3u1S311H2=2#0D272*3Z0J2}2B0?1Y1P300f323j3P056B0@6J5)0i190@0j6L6h010x3f6V6n3y0j190P0D1X2U4I6b1{18040V6!5)0I6(6?5.6:0+3P0A6.3K190t6`3x6:0!0;3W0A7a6 6W6^040^0P0k1F6~70010v190y7k7d190m0Z0w0W797b7l7e0M0v1f0f7q6#7n047p4I7c6#7e0P7x7a7l6R040x1(1@7F6@197g7i1G7K7l7H0O7J337L7Y04736-6W6:784P7b7_7-5.7e7!7j7%6W7H7+3j7{3S191d0J0J1F0M0f0Y0s743Z6:6=7;7M7Z0_7#8g40767P7`7z877C2A7X5.828y8604888a128d8f8k5)8i8p4n8v7D8M2k8r7^7y6W7S2R0F8e0I8B4X8O8x4P0650407S6T8Q1{6Y3C8/3K6%040c0Y0#160k1,0J0P6,357=198j938l047O8J6{196}80987:978K19778s8u7f8n7 7,7(7o8#477s7u7w8T7Q7r04302}0Y2L9u4e8A9f7.7t7v9m8V197U2n9H3a8m7h9q849s047*9T3o728?017?8s7_9n7~7$9r819t9K7|870Y898b8H9)8L9b8C9/9~9k9,8U989D0D9F0F9$149J9;986)6+0=1qa36;9)7ea8aaal9eaf7.9a9i9c040!9O6#8W0^8Zac3y19ap9G8)8+4e8-0f6Ua03Z8;6 aQ478^7B0Y0M250P2Taj8!aU4e9 aw8Cav6K9404as9Y9B9ha/6#767@4 9-9B1X0j0j0f2R0I8aaFaea?989M9ya}a66Q9Q7V7E9@8Ca^3u853Z7)83bm9na.6ra:a|4k7`be5.7S0=aPat9^04b0b2b4b6bjbo7obq2Xbn9v99albw4sbyby7R190s0`8caF2.190X3A1E0Z2Q3#a59A98bHb32obKbE3xb8br9B8E9|8eal96a_7.b?bJbia,8ha49z8ta@b79?b`8$8D9`8F8cc1a)8R95an9(co6/cbbdb;bf048XaEbLbRc6b^c84k8*7l0J0d19030A0$1F0F9:661{cKcM0A0Y1r0zcX1r0y0y0A0@0Y0(4c3x7S1`b3abcC8N996*2La%c2cr040p0Larb%19c alazc?2k82bO8=9B0-0Z0p0ec-6AcL04cN250v0=0}c!0J2`0*0Ac%0A0Caq4_c.6(8G0sc=chbRahc`akct14a+c4bF0$7v0n0Rd1d79%04dddfd5cf7IdabQc@0g0n0L0qdh40cVdk0A0,0u2G0A0%0~dsduc(d=2Gd-aMdB8cdDd28_8{8}8 91c{dK9*cqec7ebbdTdFd(d*d,ec8Sejd8bNe5ehdzdicWc*0(d^0Admdod|0A2Kc,eu8,e2c;e58`8|17e992dN75eec9bRdXdgen9de5dP0WdRdZdUadere)aG1k0neX5I2kd/cNdr0Idt0HeA2GeCeDexe02kc/dCdEb97.aXaZb!a$dJeUa*eTeRcid)d+eif6dOdQdSeYayd!c%e5eWf1cUdjdle}0}e{e^e`020S0F1x0W0kd?ea1q0A0=1v2J2K1?cG6mcy250:bTaAf70vaYa!fba(fdcpamef19fufpa=b}98fiemf*cufqeHe17f0(8a0kf5f=6@2Bb*1n0fb-2G8If_dL19bU3Ga~aBaH1`3*0o6N6I6sgo0o6v1H0F6xgt2(2Z0PfS2Y6v1N6P5.2R0c0b0j0P0i0f0b0C0G191z1B1D1F0Agf2Y1V1Q040W1r6)7h0F1^0D2e0}8a0F0A0f0(b3dr8ac#1^2ddD0=g*gU050Pdw2R0j1%210k0M0;0o0o0j0s0K0x0=0i170f1X0P0K3#0S0ohfhh0o0T0(aj2A0M0b0@0b0Q0f2e7H051A99hu7CgU2OhBhD1HhG1H0P3C7i3c0^0_0Ig/2O6B0If99F2R0A1@0}2o16b30}2p8Y2R0|0A0h0+3gh_0.h_0Kh~0A0K1S3k1Og#0Ah19D2I0M0uc)g,h)1^6B2Q1)ib0@0}7B1n2M0}2LfK160B1F0K0A0n0#g:aZi6aY2K0Ai9fR1@c)001o0{dob3c)gU0j1qf(0}2e2.g=0}0s0u0J8e2Kit0}7@gY2=3x1}1+1-1/gE3x2x2o2q192D0R0J0s17g/0Q0:28fc6K6HgE346Kgni;3ZaNbDfg40aSan8^dHeQbua`ffjlaufkg3bFbl2X7la{fZbA6SaO9)jgefjic_2M0b2R0Jc|f-8D8wfTjua:f;bP9.9pcSjoax9lccghcybCe5a2e,d9e5jtja8qgeb:cdgiczaD0sf)fl8C7B8PjZbzdA7f0|jOj-fe04gW06bWj;cycAj^e5jja%jH2SjKcwk9kabFb 8Gcngcedf,kr7AjNd5jR1aklbW9nkocmgbjek5c3jWa1jUe(kkkAcxjX3Wk8j jbbZj@j_jra-jFkgjIkjkG9UbSf:es9xkMcHaLf2jzjdkJaR6ZjD19eMe80=90jkjPjmktk(dVbtl19ja;j+d5k7j!jybGjAecjCku8^k|eOk~fL0IkhjJfpkIl7bFaIg2lueSl9e,7}kLfpjYkNkTeI04j$lB9V8oj)e+epdVj,jvj/j~bX9Pj?h;kXjS9Blwj:bYk1b$fplckOl)kcl!db98ll8~lnjGk$lsj:k9bsk!j3k@j.l3m2c@l%k+lLk*kr76kykSkOlHc@kD9}l|jLj(mbcvbxmfmgf+d64 med%k;lYcBlQ71e6eNl^k k#kimkku9w9Nm8mAe-etmnf{muk:1{jcjBk_lj8vf$fal0k4f+ltm%l5jql#9glbjxk08.lhmXl48@mZf9a#l`mHmQm)9nlSjQe5cEb5k3lTayl-lWj=lKmN7en5b_j`bMd#kefYlVkmk0b!iMb%g5b+g8b.kFbVkBlX0f1,k?m-7.j,mw1{j*m9l6m*gdk6l}mrmUkVlZn4bCbIcFl(nAk2nmlGnbkbkWe5f8f%m}lrm nPn%knckc0nxlycam4n_bRn2l20!mdmqnQmBmikqm^ksn0a nVb@n6k.nykAn8mtmpkPnpn)m9n+m#mGn.o7dMm5k)n~l8kynHmBmPosmo6agm6CgX6tgr6F1bgr7g0{0M04.
Aide pour addition

Additionner a et b c'est dรฉterminer le b-iรจme successeur de a. On pourra utiliser une variable temporaire initialisรฉe ร  ZERO (et pas au nombre 0 !) afin de ยซ compter ยป le nombre de successeurs calculรฉs.

Aide pour multiplication

Multiplier a et b c'est additionner b fois a ร  lui-mรชme.

Aide pour soustraction

Soustraire b ร  a c'est dรฉterminer l'ยซ entier ยป qu'il faut ajouter ร  b pour obtenir a. On pourra donc calculer les diffรฉrents successeurs de b jusqu'ร  obtenir a. Il faudra prendre soin de garder trace du ยซ nombre ยป de successeurs calculรฉs.

Un test astucieux sur la valeur de ce ยซ nombre ยป permet de repรฉrer les soustractions impossibles.