0
votes

J'ai un problème avec l'organisation de None et l'entrée des données pour trouver la valeur la plus grande et la plus petite en utilisant python

Edit: Voici les valeurs de test (7, 2, bob, 10 et 4) et la sortie souhaitée

Entrée non valide Le maximum est 10 Le minimum est 2 pour les personnes qui le souhaitent :)

salut! J'ai donc eu ce problème où je dois prendre les entrées de l'utilisateur, puis quand le type est fait, les valeurs les plus grandes et les plus petites sortent. Il y avait une petite partie où si vous mettez de mauvaises données, cela vous le dira, mais je l'ai "fait" parfaitement. Mais la partie où je dois décider du plus grand et du plus petit est mon problème. J'ai configuré Nonetype pour chacune des valeurs, mais lorsque je le mets dans les instructions if, il sélectionne simplement la première entrée comme la plus grande. J'ai joint mon code ci-dessous. Toute modification pourrait être utile. Merci.

Largest = None
Smallest = None
while True :
    num = input("Enter a number: ")
    if num == "done" :
        break
    try :
        fnum = int(num)
    except :
        print("Invalid input")
        continue
    if Largest is None:
        Largest = fnum
    elif Smallest is None:
        Smallest = fnum
    elif fnum > Largest:
        fnum = Largest
    elif fnum < Smallest:
        fnum = Smallest
print("Maximum is",Largest)
print("Minimum is",Smallest)


5 commentaires

Pouvez-vous préciser ce que vous donnez et ce que vous attendez, ainsi que ce que vous obtenez sur votre implémentation actuelle?


Notez que vers la fin de votre code, vos affectations sont à l'envers. Au lieu d'attribuer la valeur de fnum au plus grand ou au plus petit, vous faites le contraire.


@TamirIlan doesnt fnum = Le plus grand signifie que vous mettez fnum dans le plus grand? ou ai-je mal compris


Non, en fait, fnum = Largest placera la valeur détenue par Largest dans fnum.


merci beaucoup @TamirIlan qui l'a littéralement réparé, je ne l'ai jamais réalisé lmao


3 Réponses :


0
votes

Idéalement, vous pouvez utiliser == (égal à) pour la comparaison entre None

Largest = None
Smallest = None
while True :
    num = input("Enter a number: ")
    if num == "done" :
        break
    try :
        fnum = int(num)
    except :
        print("Invalid input")
        continue
    if Largest == None or Smallest == None:
        Largest = fnum
        Smallest = fnum
    elif fnum > Largest:
        Largest = fnum
    elif fnum < Smallest:
        Smallest = fnum
print("Maximum is",Largest)
print("Minimum is",Smallest)

impressions

True
True

Maintenant, vous avez toutes les conditions comme if et elif , donc à chaque fois dans la première itération, le plus grand est attribué (car c'est la première condition vraie) et dans la deuxième itération, le plus petit est attribué (car c'est la deuxième condition vraie) et cette logique peut ne pas être toujours le cas.

Ce que vous pouvez faire est de définir le plus grand et le plus petit en même temps, c'est-à-dire avoir le même point de référence avant la comparaison.

Enfin, vous ne mettez pas à jour le plus petit et le plus grand mais le faites à l'envers (comme indiqué dans les commentaires).

Coudre le tout ensemble,

x = None
y = None
print(x is y)
print(x==y)


3 commentaires

Vous devez utiliser is for None


@Cireo, pas nécessairement. Vous pourriez le confondre avec nan . None convient parfaitement avec == .


Bien sûr, cela fonctionne ici, mais ce n'est tout simplement pas recommandé. Ne changez pas ce qu'ils faisaient bien. stackoverflow.com/questions/3257919/...



0
votes

Il y a tellement de façons de faire cela. Vous devriez essayer d'utiliser un tableau. Tout d'abord, vous créez un tableau qui stockera tous les nombres. Si l'utilisateur tape "done", vous stockez le nombre maximum et minimum du tableau dans deux variables. Vraiment simple.

numbers = []

while True :
    num = input("Enter a number: ")
    if num == "done" :
        break
    try:
        num = int(num)
        numbers.append(num)

    except:
        print("Invalid input")
        continue

Largest = max(numbers)
Smallest = min(numbers)

print("Maximum is", Largest)
print("Minimum is", Smallest)


0 commentaires

0
votes

Si vous souhaitez conserver le plus grand et le plus petit sur None vous pouvez exécuter une expression conditionnelle pour affecter les valeurs. Cela entraînerait l'attribution de la première valeur à la fois au plus grand et au plus petit, puis uniquement au plus petit du plus grand si la valeur est plus grande ou plus petite.

Ce n'est pas la façon la plus optimisée de le faire, mais cela fait le travail.

Largest = None
Smallest = None
while True :
    num = input("Enter a number: ")
    if num == "done" :
        break
    try :
        fnum = int(num)
    except :
        print("Invalid input")
        continue
    Largest = fnum if Largest is None else fnum if fnum > Largest else Largest
    Smallest = fnum if Smallest is None else fnum if fnum < Smallest else Smallest

print("Maximum is", Largest)
print("Minimum is", Smallest)

Sortie avec un seul numéro.

entrez la description de l'image ici

Sortie avec vos numéros.

entrez la description de l'image ici


0 commentaires