Aide sur comparaison de de valeurs

Sankukai18 Messages postés 1 Date d'inscription vendredi 17 avril 2020 Statut Membre Dernière intervention 17 avril 2020 - Modifié le 17 avril 2020 à 15:55
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 17 avril 2020 à 19:59
Bonjour,
Je suis débutant en Python.
Je tente de créer un petit programme qui trouve le plus grand nombre dans une liste
J'ai mis des "print" un peu partout pour voir d'ou venait l'erreur dsl
Il s'avère qu'au bout d'un certain temps, les comparaisons se font mal !!!
( par ex avec la liste 10,20 et 360 ca marche mais avec 10,20 et 100 ca marche pas )
Je sais qu'il existe des methodes plus simple de comparaison mais je veux pour l'instant reste avec une boucle WHILE

Voici le script

def maximum(nbChiffre,suite):
   
    grand = suite[0]
    
    print("max = suite(0) = ",grand)
    print ("nombre de chiffre =",nbChiffre)

    i = 0

    while i < nbChiffre:
        print("")
        print("1 ) indice=",i,"  suite[",i,"]=",suite[i],"  Grand=",grand)

        if grand <= suite[i]:
            grand = suite[i]
            
            print("if")
            print(grand)
        
        else:
            grand = grand
        
            print("else")
            print(grand)

        print("2 ) indice=",i,"  suite[",i,"]=",suite[i],"  Nouveau Grand=",grand)
        
        i = i+1

    print ("")
    print ("Résultat final est maxi=",grand)



print("Nous allons rechercher le PLUS grand nombre d'une suite de nombre")
print("Entrer votre série de nombre,svp ")

serie=[]
n=0
while n!="":
    n = input("? ")
    if n!="":
        serie.append(n)

longSerie = len(serie)

maximum(longSerie,serie)


Merci d'avance

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié le 17 avril 2020 à 20:09
Par exemple
def maximum(nbChiffre,suite):
   
    grand = suite[0]
    print ("Valeur de départ =",grand)
    print ("nombre de chiffres supplémentaires =", nbChiffre - 1)

    i = 1

    while i < nbChiffre:
        print("")
        print("1 ) indice=",i,"  suite[",i,"]=",suite[i],"  Grand=",grand)

        if grand < suite[i]:
            grand = suite[i]

        print("2 ) indice=",i,"  suite[",i,"]=",suite[i],"  Nouveau Grand=",grand)
        
        i = i+1

    print ("")
    print ("Résultat final est maxi=",grand)



print("Nous allons rechercher le PLUS grand nombre d'une suite de nombre")
print("Entrer votre série de nombre,svp ")


Plus concis et avec toutes les informations nécessaires au déboggage.

Cette fonction est correctement codée (même ta première version, elle faisait juste de la surqualité).

Le problème est autre.
Quand tu saisis du texte au clavier, c'est du texte.
Taper 10 ne fait pas le nombre 10 mais le texte
'10'

Et par ordre alphabétique, 100 est avant 20.

C'est la force de python, c'est simple on ne se soucis pas trop des types;
mais pour moi c'est son plus gros défaut.
Si, dès le départ, on pouvait dire que dans la serie, on stocke des entiers, ça aurait bloqué là.
Et tu aurais compris aussitôt.
Voilà une correction possible
serie=[]
n=0
while n!="":
    n = input("? ")
    if n!="":
        entier = int(n)
        serie.append(entier)

longSerie = len(serie)

maximum(longSerie,serie)


1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
17 avril 2020 à 19:53
Bonjour

tout d'abord merci à @karamel d'avoir ajouté les balises de codes dans ton message.
Avec python c'est primordial, car sinon l'indentation n'est pas conservée.
Pour tes prochains messages, voilà un lien vers un tuto sur leur bonne utilisation https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


Bon maintenant, voyons ton code.
Les prints pour le debug OK.
Mais y'a plein de trucs qui ne servent à rien, ça alourdi et du coup c'est plus dur à débuguer.

i = 0
, grand vaut déjà ce qui est dans suite[0], ce qui est très bien. Tu t'évites le bug de la valeur par défaut supérieure à toute la série.
Mais du coup comparer grand à suite[0] ne sert à rien.
On commence donc avec i = 1

if grand <= suite[i]:

Pourquoi supérieur ou égal, tu cherches le plus grand ? Ou les ex aequo?
Dans le cas du plus grand, c'est <.
Dans le cas des ex aequo, il faut tout revoir, donc on va dire que c'est pas ça.

        else:
            grand = grand
        
            print("else")
            print(grand)

Ben non pas de else, grand = grand ça ne rime à rien.
Donc cette clause, on l'oublie.
En plus, la ligne d'après tu "printes " à nouveau la valeur de grand, trop d'infos noie celle qui est importante.

Déjà, tu peux corriger ces points.
0
Rejoignez-nous