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)
3 Réponses :
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)
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/...
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)
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.
Sortie avec vos numéros.
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