1
votes

Pause ne pas arrêter simple While Loop Python

Python noob ici. J'essaie de créer une liste avec des nombres saisis par un utilisateur, puis de faire quelques calculs simples avec les nombres de la liste à la fin, dans une boucle while. La boucle While ne s'arrête pas lorsque «done» est entré. Il imprime simplement «Entrée non valide».

list = []
while True:
    try:
        n = int(input('Enter a number: '))
        list.append(n)
    except:
        print('Invalid input') 
    if n == 'done':
        break

print(sum.list())
print(len.list())
print(mean.list())


1 commentaires

La seule façon d'attribuer une valeur à n est après avoir appliqué int () à l'entrée de l'utilisateur. Il n'y a pas de valeur de retour imaginable de int () qui soit égale à 'done' ...


4 Réponses :


0
votes

Si l'utilisateur entre done , vous tenterez de convertir en int , ce qui déclenchera une exception que vous attraperez ensuite.

À la place, effectuez votre vérification avant de tenter de le convertir en entier.


0 commentaires

1
votes

C'est parce que la fonction int () essaie de convertir votre entrée en un entier, mais elle génère une erreur parce que la chaîne 'done' ne peut pas être convertie en un entier. Un autre point est que sum (), mean () et len ​​() sont des fonctions, pas des attributs de listes . De plus, mean () n'est pas une fonction intégrée en python, il doit être importé avec numpy . Essayez-le comme ceci:

from numpy import mean
list = []
while True:
    try:
        n = input('Enter a number: ')
        list.append(int(n))
    except:
        if n!='done':
            print('Invalid input') 
    if n == 'done':
        break

print(sum(list))
print(len(list))
print(mean(list))


0 commentaires

1
votes

Vous devrez séparer l'entrée de l'utilisateur de réception en vérifiant par rapport à «terminé» de la conversion en un nombre et en l'ajoutant à la liste. Et vous devrez vérifier "terminé" avant de convertir l'entrée en un entier.

Essayez quelque chose comme ceci:

list_of_numbers = []

while True:
    user_input = input("Enter a number or 'done' to end: ")

    if user_input == "done":
        break

    try:
        number = int(user_input)

    except ValueError:
        print("invalid number")
        continue

    list_of_numbers.append(number)

print(list_of_numbers)

# further processing of the list here


3 commentaires

J'aime cette approche cependant, j'obtiens un AttributeError: l'objet 'builtin_function_or_method' n'a pas d'attribut 'list'.


@antman eh bien, cela vient probablement d'un traitement supplémentaire de votre part. Je soupçonne que vous faites quelque chose.list quelque part et que quelque chose n'a pas d'attribut list .


Oui, j'essayais d'imprimer (sum.list ()) au lieu de print (sum (list)) .... noob travaillant tard ... Merci!



1
votes

Vous devez vérifier si vous pouvez transformer l'entrée en un entier avant de l'ajouter à votre liste. Vous pouvez utiliser la commande try / except pour détecter si la variable d'entrée est convertible en entier. Si ce n'est pas le cas, vous pouvez vérifier done et quitter.

Enter a number: 12
Enter a number: 3
Enter a number: 4
Enter a number:
Invalid input
Enter a number: 5
Enter a number:
Invalid input
Enter a number: done
sum: 24
length: 4
mean: 6.0

Exemple d'interaction

list = []
while True:
    n = input('Enter a number: ')
    try:
        n = int(n)
        list.append(n)
    except ValueError:
        if n == 'done':
            break
        print('Invalid input') 

total = sum(list)
length = len(list)
mean = total/length

print('sum:', total)
print('length:', length)
print('mean:', mean)


0 commentaires