Inscription / Connexion Nouveau Sujet

1 2 +


Niveau terminale
Partager :

programme python congruence

Posté par
mazel
21-11-21 à 19:47

Bonsoir, je bloque sur un programme python que je dois écrire.
Il faut que j'écrive un programme python qui demande à l'utilisateur les 15 premiers chiffres de sa carte bancaire, qui les stocke dans une variable a, qui affiche la liste a et qui donne la clé de la carte.
Je pense que j'ai compris la première partie du programme avec la liste mais après je pense qu'il faut juste que je retranscrive le programme déjà fait ( qui permet de vérifier le numéro) et que je modifie la fin pour calculer la clé mais si c'est ce qu'il faut faire je n'y arrive pas. J'ai écrit quelque trucs mais rien ne marche pouvez-vous m'aider ?

programme python congruence

Posté par
carita
re : programme python congruence 21-11-21 à 20:58

bonsoir

dommage que tu n'aies pas recopié intégralement l'énoncé.
là, tu le racontes à ta façon et tout n'est pas très clair.
par exemple, à quoi correspond le "c" dans l'algorithme ?

a est  une liste, ses éléments sont indicés.

d'après ce que je comprends, l'écriture a2k+1, avec k varie de 0 à 7, permet de cibler les 8 éléments de rang impair.

pour le reste d'une division, tu as la fonction modulo (%)

J'ai écrit quelque trucs mais rien ne marche   --- montre ce que tu as fait (avec le début du programme)

Posté par
mazel
re : programme python congruence 21-11-21 à 21:25

c correpond à la clé de controle du numéro d'une carte bancaire.
L'énoncé est le suivant:

programme python congruence

Posté par
mazel
re : programme python congruence 21-11-21 à 21:31

Et voici ce que j'ai fait pour le programme

programme python congruence

Posté par
carita
re : programme python congruence 21-11-21 à 21:35

ok
tu as testé ce programme donné pour voir  ?

modifie ce programme pour qu'il te permette de saisir les 15 chiffres de la carte, et qui affiche la liste

Posté par
carita
re : programme python congruence 21-11-21 à 21:35

messages croisés
je te lis et je reviens

Posté par
carita
re : programme python congruence 21-11-21 à 21:43

le début me semble ok

erreurs :
1) for k in range (0,7)  
==> k va prendre les valeurs 0, 1, 2, 3, 4, 5, 6   et pas 7
donc si tu veux que ta boucle tourne 8 fois, il faut ...?

à savoir : in range (0,7) peut se remplacer par in range (7) :
à défaut, le compteur part de 0

2) à ton avis, de quel type est l'input réalisé au début : int, float, ou str ?
parce que lorsque tu vas multiplier par 2, ensuite, le résultat risque d'être surprenant...

Posté par
carita
re : programme python congruence 21-11-21 à 21:53

attention à la correspondance entre les indices impairs et les indices de la liste a :

tes 15 nombres sont numérotés de 1 à 15
n° ordre des chiffres :   1  2  3  4  5  6  7  ........ 15
mais dans la liste, ils sont indicés de 0 à 14

donc si tu veux cibler les 8  n° d'ordre impair (1, 3, 5..., 15)
faut adapter les indices dans la liste.

seconde boucle:
for k in range (1,7) :   même problème que précédemment : si tu veux 7 itérations, tu dois changer le second paramètre

remarque : P = P + a[2*k]  peut s'écrire  P += a[2*k]

Posté par
carita
re : programme python congruence 21-11-21 à 21:55

mazel @ 21-11-2021 à 21:25

c correpond à la clé de controle du numéro d'une carte bancaire.

excuse moi mais je ne comprends pas : à quel moment intervient c ?
on le saisit ? on le calcule ?
parce que dans le 1er algorithme que tu as donné, on est censé connaitre c

ou alors il manque un bout d'énoncé (?)

Posté par
mazel
re : programme python congruence 21-11-21 à 22:38

on doit calculer c dans le programme python. Le 1er algorithme que j'ai envoyé nous servait pour vérifier si un numéro de carte bancaire était bon quand on connaissait les 16 chiffres ( on devait l'utiliser pour les premières questions de l'exercice) mais comme on en a que 15 je suppose qu'on doit modifier la fin pour calculer c.
J'ai modifié un peu le programme en fonction de tes remarques mais quand je le lance ça me met un message d'erreur sur la ligne où on définit R.

programme python congruence

Posté par
carita
re : programme python congruence 21-11-21 à 22:46

oui, normal, cf  mon 2) de 21h43

==> sans autre précision, un 'input' renvoie une chaine (str) et non pas un entier, comme tu le souhaites.

ainsi, si python sait multiplier une str par 2,  il ne peut pas calculer un modulo !

que dois-tu rajouter, par exemple sur la ligne de "a.insert...."  ?

Posté par
mazel
re : programme python congruence 21-11-21 à 22:59

il faut que j'écrive:    a.insert(i,int(input)(''))                       ?

Posté par
carita
re : programme python congruence 21-11-21 à 23:01

je viens de voir :
ta dernière boucle ; l'indice de a n'est pas correct

tu souhaites accéder aux n° d'ordres pairs :
pour k = 1
2k+1 = 3
donc tu vas accéder à a[3], donc au 4ème chiffre
...et donc tu as zappé le second chiffre de la liste

Posté par
carita
re : programme python congruence 21-11-21 à 23:02

oui, int(input(...))

Posté par
carita
re : programme python congruence 21-11-21 à 23:12

pour calculer la clé, tu as une idée ?
(je ne pourrai pas rester très longtemps)

Posté par
mazel
re : programme python congruence 21-11-21 à 23:19

ça me met une erreur sur le print qui renvois la liste.
Merci de ton aide d'ailleurs je suis plutôt une bille en programmation.

programme python congruence

Posté par
carita
re : programme python congruence 21-11-21 à 23:21

pb de parenthèses

a.insert(i, int(input('')))

et corrige ta dernière boucle (cf 23h01)

Posté par
mazel
re : programme python congruence 21-11-21 à 23:23

On sait que S=I+P+c et que S est un multiple de 10
donc c=S-(I+P) sachant que S=10k

Posté par
carita
re : programme python congruence 21-11-21 à 23:24

juste pour le fun :

le programme peut être 'allégé'
P=I=R=0         --- 1 ligne au lieu de 3

et
    R = 2*a[2*k] % 9
    I += R

peut s'écrire         I += 2*a[2*k] % 9     ---- plus besoin de la variable R

Posté par
alb12
re : programme python congruence 21-11-21 à 23:27

salut,
1/ la cle est le seizieme chiffre de la liste
2/ je crains que l'algo de l'enonce soit incorrect (à voir)

Posté par
carita
re : programme python congruence 21-11-21 à 23:28

mazel @ 21-11-2021 à 23:23

On sait que S=I+P+c et que S est un multiple de 10
donc c=S-(I+P) sachant que S=10k


ok
mais concrètement, quelle instruction vas-tu écrire ?

je te propose de rajouter deux print provisoires , pour voir
print(I)    et print (P)

qu'est-ce que ça renvoie,  sur ta saisie ?
et donc quelle valeur de c convient ?
ça peut t'aider à trouver la formule...

Posté par
carita
re : programme python congruence 21-11-21 à 23:30

bonsoir alb12

oui sans doute la méthode présentée dans l'algo est 'inventée' pour l'exo

Posté par
mazel
re : programme python congruence 21-11-21 à 23:37

j'obtiens I=29 et P=21
il semblerait que P marche mais que I ne fasse pas le reste de la division par 9

Posté par
alb12
re : programme python congruence 21-11-21 à 23:40

la ligne R prend la valeur etc me semble incorrecte (dans l'enonce)

Posté par
carita
re : programme python congruence 21-11-21 à 23:42

euh, je ne comprends pas ton raisonnement, là.

je reprends ce que tu as dit plus haut :
On sait que S=I+P+c et que S est un multiple de 10
donc c=S-(I+P) sachant que S=10k


dans ton exemple
I+P = 50  --> multiple de 10 --> donc clé  = 0
certes, ici, ça ne nous aide pas trop
reste à voir dans ton énoncé si la clef peut être nulle...

---

un autre exemple, plus général :
I = 29
P = 25
clé = .?

Posté par
carita
re : programme python congruence 21-11-21 à 23:47

si tu dois aller dormir un pourra reprendre demain

Posté par
mazel
re : programme python congruence 21-11-21 à 23:48

Les chiffres qui composent la clé sont compris entre 0 et 9 c'est pour ça que il y a forcément un problème dans la ligne de R.
J'ai calculé rapidement la somme des chiffres de rang pair (donc P) et j'ai trouvé 21 donc ça serait bon dans le programme mais j'ai aussi calculer I rapidement (il y a peut être une erreur ) et j'ai aussi trouvé 21 donc ça ferait S=21+21=42 donc c serait égale à 8 ce qui pourrait être possible.

Posté par
mazel
re : programme python congruence 21-11-21 à 23:49

On peut reprendre demain si tu veux tu m'as déjà bien aidée

Posté par
carita
re : programme python congruence 21-11-21 à 23:53

Les chiffres qui composent la clé sont compris entre 0 et 9 c'est pour ça que il y a forcément un problème dans la ligne de R.
je ne vois pas le problème avec R.
R est toujours entier compris entre 0 et 8

---

S=21+21=42 donc c serait égale à 8  ==> oui
donc quelle formule tu vas écrire ?

Posté par
carita
re : programme python congruence 21-11-21 à 23:53

ok, à demain alors

tu t'en sors plutôt bien
bonne nuit !

Posté par
mazel
re : programme python congruence 21-11-21 à 23:55

ah non j'ai du faire une erreur et oublier le dernier chiffre en calculant I à la main et je trouve bien I=29 donc ça ferait bien S=29+21=50 et donc c qui serait égale à 0.

Posté par
alb12
re : programme python congruence 22-11-21 à 08:59

ok j'avais mal lu il faut ecrire un programme qui donne la cle

Posté par
carita
re : programme python congruence 22-11-21 à 09:03

bonjour

@alb12
je viens de regarder plus attentivement ton lien; la différence porte sur le calcul de R :

ici, R est égal au reste de la division euclidienne par 9
tandis que sur l'algo de Luhn, si on est >9, on enlève 9

ainsi, dans le cas d'un 9 pour chiffre de rang impair :
- l'exo va calculer (2*9)%9  et retourner 0
- l'algo de Luhn va calculer  (2*9)-9 et retourner 9

évidement la clef ne sera plus la même.
c'est ce à quoi tu pensais ? (merci pour ton alerte)

----

ici, l'énoncé est une photo, donc pas de risque d'erreur de recopie;
j'en déduis que le professeur a sciemment choisi cette procédure,
ne serait-ce que pour éviter des copier-coller de réponses trouvées sur le net. (?)

Posté par
carita
re : programme python congruence 22-11-21 à 09:09

ah, messages croisés.
oui, ici il faut calculer la clé,
mais, sauf erreur de compréhension de ma part, il y a effectivement une différence importante entre les 2 algos, tu as raison.

Posté par
mazel
re : programme python congruence 22-11-21 à 16:28

Pour calculer c j'ai fait:

for k in range(0,21):
c=10*k-(I+P)
if 0<=c<=9:
       print('La clé de la carte est',c)

ça me donne les bons résultats mais ça me parait pas être complétement correct par rapport a 10*k qui remplace le S mais sinon je sais pas comment le traduire

Posté par
carita
re : programme python congruence 22-11-21 à 16:37

il y a bien plus simple

réfléchis à partir d'un exemple, comme tu as fait hier soir

I = 29
P = 25
quels calculs (détaillés) fais-tu à la main pour trouver la clé ?

Posté par
carita
re : programme python congruence 22-11-21 à 16:47

je te cite :
"ça ferait S=21+21=42 donc c serait égale à 8 ce qui pourrait être possible."

décortique les étapes de ce raisonnement, et écris les

pas besoin d'une boucle pour trouver la clef.

Posté par
carita
re : programme python congruence 22-11-21 à 17:05

tu es toujours là ?

Posté par
mazel
re : programme python congruence 22-11-21 à 18:00

Oui désolé, je suis rentrée du lycée.
Pour c, je fais I+P et ensuite je regarde combien il manque pour pouvoir avoir un multiple de 10
ici 29+21=50, il manque 0 pour avoir un multiple de 10

Posté par
carita
re : programme python congruence 22-11-21 à 18:12

euh cet exemple, on a vu qu'il ne nous aide pas beaucoup (cas particulier)

je t'ai proposé 29 et 25

Posté par
mazel
re : programme python congruence 22-11-21 à 18:16

on fait 29+25=54 et 60-54=6 ou 54+6=60
la clé devrait être 6

Posté par
carita
re : programme python congruence 22-11-21 à 18:21

je te propose un peu différemment :

on fait 29+25=54   ----    oui, ça ok

60-54=6   ==> plutôt  que de chercher le complément à la dizaine supérieure,
pourquoi ne pas s'intéresser d'abord au 4 du  54   ?

quel opérateur tu peux utiliser pour récupérer 4 à partir du 54 ?

ensuite, trouver 6 sera facile...

Posté par
mazel
re : programme python congruence 22-11-21 à 18:40

Déso je comprends pas trop ce que tu veux dire:
54=10*5+4
54%10==4
?

Posté par
alb12
re : programme python congruence 22-11-21 à 18:45

pour info:
Sur le devant d'une carte bancaire, on peut lire 16 chiffres. Les 15 premiers ont une signification (identification de la banque, du numéro de compte...) et le 16e est une clé de vérification qui permet de savoir s'il y a eu une erreur en recopiant le numéro par exemple.

Pour vérifier si un numéro est valide, on considère les 16 chiffres de la carte.

    On commence par multiplier par deux tous les chiffres de rang impair (le premier, le troisième etc.). Si le résultat de la multiplication par deux dépasse 9, on soustrait 9.
    On additionne tous les chiffres du numéro obtenu après ces multiplications par deux.
    Si le résultat est un multiple de 10 alors le numéro est valide. Sinon, il ne l'est pas.

Posté par
carita
re : programme python congruence 22-11-21 à 18:46

et oui
(P+I)%10  --> va te retourner le 4

pour avoir 6, il te reste à faire ...?

Posté par
carita
re : programme python congruence 22-11-21 à 18:48

bonsoir alb12,
suis bien d'accord.

mais là, tu décris l'algo de Luhn, qui est différent de l'énoncé de mazel.

Posté par
alb12
re : programme python congruence 22-11-21 à 18:49

oui mais est-ce que l'algo de cet exercice marche dans la pratique ?

Posté par
carita
re : programme python congruence 22-11-21 à 18:55

ah ça ! on va faire une réclamation auprès du professeur

je l'ai testé avec une vraie carte, ça marche pas ^^

Posté par
mazel
re : programme python congruence 22-11-21 à 19:07

Pour c=6 on fait 10-4
mais concrètement qu'est ce que je dois écrire pour (I+P)%10?
Si le programme de l'énoncé est ce que ça influe aussi sur le résultat de la question c  ?

programme python congruence

Posté par
carita
re : programme python congruence 22-11-21 à 19:20

concrètement qu'est ce que je dois écrire pour (I+P)%10?

au moment où, dans ton programme, tu calcules la clef
la machine 'connait' I et P
donc elle peut calculer (I+P)%10   ---- 4 dans ton exemple

c = ....... (I+P)%10 .......  
complète ce qu'il manque dans cette formule

1 2 +




Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1674 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !