C'est un programme qui invite à plusieurs reprises un utilisateur à entrer des nombres entiers jusqu'à ce que l'utilisateur entre «terminé». Une fois que «terminé» est entré, il imprime le plus grand et le plus petit des nombres.

Les entrées personnalisées sont données comme suit:

7
2
11
flip
10
4
done

Production:

Entrée invalide

Le maximum est de 10

Le minimum est de 4

Résultat attendu:

Entrée non valide

Le maximum est de 11

Le minimum est de 2

a=list()
while True:
    sval=input()
    if sval == "done":
        break    
    try:
        value=int(sval)
        a.append(value) 
    except:
        print("Invlid")
        continue



    def sml():
        val=a[0]
        for i in range(len(a)):
            if a[i]<val:
                smalles=a[i]
        print("Minimum is",smalles)

    def lge():
        val=a[0]
        for i in range(len(a)):
            if a[i]>val:
                larges=a[i]
        print("Maximum is",larges)

lge()
sml()
0
Gunjeet Jain 3 juin 2020 à 07:32

4 réponses

Meilleure réponse

Dans ces boucles:

        val=a[0]
        for i in range(len(a)):
            if a[i]>val:
                larges=a[i]

Vous avez deux valeurs, val et largest, alors que vous n'en voulez vraiment qu'une (largest). L'idée de trouver une valeur maximale est que vous voulez comparer avec la plus grande valeur que vous avez trouvée jusqu'à présent, et la mettre constamment à jour chaque fois que vous trouvez une valeur plus grande.

Une manière beaucoup plus courte d'écrire ce code serait:

a = []
while True:
    val = input()
    if val == "done":
        break
    try:
        a.append(int(val))
    except ValueError:
        print("Invalid")

print(max(a))
print(min(a))

Ou, si vous n’êtes pas autorisé à utiliser les fonctions max et min, vous pouvez simplement maintenir largest et smallest au fur et à mesure, au lieu de garder un tableau du tout :

largest = None
smallest = None
while True:
    val = input()
    if val == "done":
        break
    try:
        num = int(val)
    except ValueError:
        print("Invalid")
        continue
    if (largest, smallest) == (None, None):
        largest, smallest = num, num
    if largest < num:
        largest = num
    if smallest > num:
        smallest = num

print(largest)
print(smallest)
0
Samwise 16 juil. 2020 à 17:28

Au lieu de trouver la valeur maximale et minimale après l'ajout au tableau, vous pouvez la trouver avant. Cela réduira le coût d'itération du tableau à chaque fois pour trouver le maximum et le minimum.

a=list()
max_, min_ = float('-inf'), float('inf')
while True:
    sval=input()
    if sval == "done":
        break
    try:
        value = int(sval)
        if value > max_:
            max_ = value
        elif value < min_:
            min_ = value
        a.append(value)
    except:
        print("Invalid")
        continue

print("Maximum is", max_)
print("Minimum is", min_)
1
bumblebee 3 juin 2020 à 04:54

Problèmes avec votre code

  • Pourquoi vos fonctions sont dans la boucle while
  • Chaque fois que vous trouvez petit et grand, vous comparez uniquement avec la première valeur

Solution

Vous trouverez ci-dessous la plus petite réponse modifiée possible à partir de votre code.

a=list()
while True:
    sval=input()
    if sval == "done":
        break    
    try:
        value=int(sval)
        a.append(value) 
    except:
        print("Invlid")
        continue



def sml():
    smalles=a[0]
    for i in range(len(a)):
        if a[i]<smalles:
            smalles=a[i]
    print("Minimum is",smalles)

def lge():
    larges=a[0]
    for i in range(len(a)):
        if a[i]>larges:
            larges=a[i]
    print("Maximum is",larges)

lge()
sml()
1
PSKP 3 juin 2020 à 04:57

Dans chaque itération, vous comparez avec le premier élément de la liste, c'est-à-dire val (val = a [0]) et ne mettez pas à jour le val. Modifier

Code

a=list()
while True:
    sval=input()
    if sval == "done":
        break    
    try:
        value=int(sval)
        a.append(value) 
        print("Appended")
    except:
        print("Invlid")
        continue



    def sml():
        
        print(a)
        smalles=a[0]
        for i in range(len(a)):
            if smalles > a[i]:
                print(a[i] , end=" ")
                smalles=a[i]
        print()
        print("Minimum is",smalles)

    def lge():
        larges=a[0]
        for i in range(len(a)):
            if a[i]>larges:
                larges=a[i]
        print("Maximum is",larges)

lge()
sml()
0
Community 20 juin 2020 à 09:12