1
votes

Comment puis-je arrêter une boucle lorsque la pause ne fonctionne pas?

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?

2 commentaires

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 simples sauf: comme celle-ci sont une mauvaise pratique, voir stackoverflow.com/questions/54948548/... .


3 Réponses :


3
votes

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))


0 commentaires

1
votes

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


0 commentaires

1
votes

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))


0 commentaires