x=[] while True: try: x.append(float(input('what are your numbers?\n'))) if x.append('done'): break except: print('bad data') continue print(len(x), sum(x), min(x), max(x)) In this code I want the user to provide numbers, skip strings and finally I want the loop when the user types in 'done' but it does not work, what am I doing wrong here?
3 Réponses :
Attribuez d'abord la valeur d'entrée à une variable afin de pouvoir l'utiliser pour la comparaison et la transtyper en float.
x=[] while True: inp = input('what are your numbers?\n') if inp == 'done': break try: x.append(float(inp)) except ValueError: print('bad data') print(len(x), sum(x), min(x), max(x))
Ce code ne casse pas lorsque l'entrée est "" done "
user_input = input('what are your numbers?\n') if user_input == "done": break # Continue checking the input
Ceci ajoute la chaîne" done "à la liste x
. append
renvoie None
, donc votre condition est toujours False
. break
fonctionnera très bien - vous devez écrire votre code pour y arriver. Vérifiez la validité de l'entrée avant de la convertir en flottant. Au cours de ce processus, vérifiez "terminé":
if x.append('done'): break
vous devez d'abord vérifier si l'entrée est 'done'
avant de l'insérer dans votre liste, car max
augmentera TypeError
si l'un des list elements n'est pas un nombre. De plus, continue
n'est pas nécessaire dans votre implémentation car c'est la dernière instruction de votre boucle:
x=[] while True: try: data = input('what are your numbers?\n') if data == 'done': break else: num = float(data) x.append(num) except: print('bad data') print(len(x), sum(x), min(x), max(x))
Vous ne pouvez pas faire un flottant de la chaîne 'done' donc le code va à l'exception et continue la boucle
Qu'espérez-vous que
if x.append ('done'):
fasse? `Soit dit en passant, des instructions simplessauf:
comme celle-ci sont une mauvaise pratique, voir stackoverflow.com/questions/54948548/... .