Exercice python lycée

Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Voici mon exercice que je dois rendre en 1ère spécialité sur du Python, j'ai fais un code que je trouve valide mais il ne marche pas, pourriez vous m'indiquer vos conseils ?

def manhathanMaboul(N,M):
    amismax=0
    amis=0
    for i in range (len(M)):
        for k in range (len(M)):
            if M[i]<=M[k]<=(M[i]+N):
                amis=amis+1
            if amis>amismax:
                amismax=amis
    return amismax


Les indentations ne se marquent pas mais je les ai faites !

modération : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icones pour les enrichissements du texte. Celle qui a cet aspect
<> ▼
permet d'appliquer aux codes, suivant une liste de valeurs, le format correspondant à sa nature.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

3 réponses

Utilisateur anonyme
 
Bonsoir

CCM, comme tous les sites de code qui se respectent disposent d'un outils pour mettre en forme le code (et donc conserver l'indentation), voir le texte et le lien (à lire attentivement) que jee pee a ajouté à la fin de ton message en le corrigeant.

Pour ton problème, selon ton énoncé M est un entier, tu ne peux donc ni récupérer sa longueur, ni l'indicer.

0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713
 
Bonjour,

On dirait que la réalisation ne respecte déjà pas l'énoncé, intervertissant M et N.

Franchement j'ai peu d'idée sur la solution ;-)

Après Yamine, pour que tout le monde soit d'accord sur l'énoncé, et sa solution, quelles réponses apporterais-tu à ces paramètres passés :

manhathanMaboul(7,[1,2,3,4,4,5,7,9,10,22,23,24])
manhathanMaboul(1,[1,2,3,4,4,5,7,9,10,22,23,4,24])
manhathanMaboul(0,[1,2,3,4,4,5,7,9,10,22,23,24,38])
manhathanMaboul(8,[22,25,26,1,4,7,8,10,141,2,3,4,4,5,7,9,10,22,23,24,67,27])
0
Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bonjour, je n'ai pas bien compris ce que tu me demandes de faire ^^'
0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713 > Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Donner les réponses que doit restituer le programme. Pour programmer il faut être capable de faire tourner "à la main", dans sa tête, l’algorithme que l'on veut coder.
0
Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour, merci beaucoup j'avais juste inversé N et M, mais il ne marche toujours pas malheureusement...
0
Utilisateur anonyme
 
j'avais juste inversé N et M


Oui c'était le premier point et comme jee pee, je ne suis pas sûr de comprendre l'énoncé.
Sa question est pertinente, pour voir si nous comprenons comme toi.

Si ton prof t'as donné des précisions ou un jeu de données de correction (valeurs d'entrées et résultat associé) se serait bien de nous les communiquer.
0
Utilisateur anonyme
 
par exemple, avec le premier jeu de données que propose jee pee
manhathanMaboul(7,[1,2,3,4,4,5,7,9,10,22,23,24])


La façon dont je comprends l'énoncé donne 26 amis maximum, et ton code 49.
0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713 > Utilisateur anonyme
 
Heureusement que je n'ai pas encore cherché à écrire le programme, moi je donnerais comme réponse 7.
0
Utilisateur anonyme > jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention  
 
mdr
0
Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai eu un exemple, il vous aidera surement à mieux comprendre :
0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713
 
Dans le fond je vais pouvoir l'écrire mon code ;-)

Yamine un indice : j'avais bien senti qu'il fallait trier la liste en entrée.
0
Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention  
 
Trier en ordre croissant ? (j'y ai pensé mais je me suis dis que ça ne servais à rien)
Mon raisonnement : Je veux tester pour chaque valeur de N combien d'amis sont compris dans son temps de séjour M et trouver quelle est le nombre maximum d'amis qu'elle peut voir
0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713 > Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
oui aussi, en triant je voulais faire une boucle moins longue en sortant sans explorer toute la liste.

en fait c'est l'initialisation de ton compteur amis qui est mal positionnée, il cumule toutes les boucles
0
Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ok, j'avais essayé de rajouter une variable amismax qui stockerai du coup la valeur amis du tour de la boucle où il serait le plus haut , ce n'est pas la bonne solution ?

Je t'avoue que je suis un peu confus (je n'ai pas beaucoup d'experience en python je debute),la solution est à ma portée tu penses ?
Ou plutôt est-ce que je suis loin du bon résultat ?
0
jee pee Messages postés 41510 Date d'inscription   Statut Modérateur Dernière intervention   9 713 > Yamine_1411 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Tu es à une marche du bon résultat.

L’écriture d'un programme c'est une idée d'un processus (la tienne tient la route). Après cela ne fonctionne pas du premier coup, on attend une étincelle d'intelligence, ou le lendemain, ou on s'attelle à un travail de fond, le debug. Je suis toujours surpris dans les codes que l'on nous donne sur le forum de ne pas voir de print() pour comprendre ce qui se passe. On doit parfois en mettre après chaque ligne, pour voir où le programme passe et ce que contient chaque variable touchée.

Voilà ton code, qui pour l'exemple donné retourne 15. En une seule modification, mineure sur la forme, majeure sur la logique, il donne le 3 attendu. J'ai rajouté un print pour que tu t'interroges sur l'évolution des compteurs.
def manhathanMaboul(M,N):
    amismax=0
    amis=0
    for i in range (len(N)):
        for k in range (len(N)):
            if N[i]<=N[k]<=(N[i]+M):
                amis=amis+1
                print(i,k,N[i],N[k],N[i]+M,"compteurs", amis, amismax)
            if amis>amismax:
                amismax=amis
    print("Résultat",M,N," = ",amismax)
    return amismax

manhathanMaboul(5, [3,11,1,7,6,12])
0