Exercice python lycée

Signaler
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021
-
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
-
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

Messages postés
15387
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 janvier 2021
642
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.

Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225
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])
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021
>
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021

Bonjour, je n'ai pas bien compris ce que tu me demandes de faire ^^'
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225 >
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

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.
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

Bonjour, merci beaucoup j'avais juste inversé N et M, mais il ne marche toujours pas malheureusement...
Messages postés
15387
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 janvier 2021
642
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.
Messages postés
15387
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 janvier 2021
642
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.
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225 >
Messages postés
15387
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 janvier 2021

Heureusement que je n'ai pas encore cherché à écrire le programme, moi je donnerais comme réponse 7.
Messages postés
15387
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 janvier 2021
642 >
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021

mdr
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

J'ai eu un exemple, il vous aidera surement à mieux comprendre :
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225 >
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

Ta logique reste bonne. Mais il est fréquent quand on travaille sur des intervalles ou des bornes qu'aux valeurs traitées (incluses, exclues, traitées, non traitées) on fasse un +1/0/-1 suivant les situations.

Ainsi on voit sur 1,(5,6), qu'il ne faut prendre, quand on traite le 5, que les personnes présentes ce même jour.
(N[i] + M - 1)
traite ce cas, et c'est un cas général, pas une exception, c'est valable pour 2,3,4 ... Et cela règle aussi le 0.

Comme toi, j'ai écris mon premier programme au lycée, en 1974/75. Ce qui fait que j'ai, un peu, d'expérience ;-)
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021
>
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021

Quand je l'ajoute juste au code cela me donne 0 au lieu du 3 c'est normal ?
Il faut faire une autre branche de code avec ces cas précis ?
Ah oui en effet tu dois avoir beaucoup d'éxperience même ^^
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225 >
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

???

def manhathanMaboul(M,N):
    amismax=0
    for i in range (len(N)):
        amis=0
        for k in range (len(N)):
            if N[i]<=N[k]<=(N[i]+M-1):
                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])
manhathanMaboul(1,[5,6])
manhathanMaboul(0,[1,2,3,4,4])
manhathanMaboul(5,[3,11,1,7,6,8,12])    


Résultat 5 [3, 11, 1, 7, 6, 12]  =  3
Résultat 1 [5, 6] = 1
Résultat 0 [1, 2, 3, 4, 4] = 0
Résultat 5 [3, 11, 1, 7, 6, 8, 12] = 3
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021
>
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021

Ah oui désoleeeee je devais avoir une erreur dans mon code...
SI tu as encore du temps, et si je te dérange pas trop, tu pourrais m'expliquer rapidement (2 ou 3 lignes) le raisonnement que j'aurais du avoir ? (pour arriver à trouver mon erreur tout seul)
Messages postés
30587
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 janvier 2021
7 225 >
Messages postés
12
Date d'inscription
mercredi 30 décembre 2020
Statut
Membre
Dernière intervention
1 janvier 2021

D'une façon générale, se rappeler qu'il faut debugger le code, principalement un faisant des prints pour voir où passe le programme et que contiennent les variables.

Se faire un jeu d'essai avec plusieurs cas, dans les extrêmes. Ici on voit bien que tu ne peux pas te satisfaire que ton programme réponde à l'exemple (3), il faut envisager d'autres valeurs. D'ailleurs le prof doit avoir sous le coude un jeu d'essai pour valider ton programme dans diverses situations.

Après on est souvent confronté à des problèmes d'intervalles et de poteaux : https://warmaths.fr/MATH/geometr/Vocabulaire%20de%20base/intervalarith.htm

Pour analyser le problème de l'exercice, moi je suis très concret. Je suis présent 1 jour, et j'ai un ami le mardi et un ami le mercredi, donc je ne pourrais en voir qu'un. 1, (5,6) = 1 Le 5 est une date alors que le 1 est un compteur de jours. Si je suis présent 1 jour c'est je suis présent du 5 au 5 (5 +1 -1), si je suis présent 2 jours du 5 au 6 (5 + 2 -1). Le premier jour, c'est la date de départ. On pourrait comparer aux listes ou tableaux en python où la première position ne correspond pas à l'indice (1), mais à l'indice (0) : on accède à la première valeur en effectuant un déplacement de zéro depuis le début, l'indice n'est pas une position mais la valeur du déplacement.