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 = Largestplacera 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