2 votes

dépaquetage du résultat de split() dans un nombre de variables inférieur à celui spécifié

J'ai fait un peu de code où j'entre des nombres, je les divise en variables séparées et ensuite je commande ces nombres, et je peux les diviser sans problème, mais quand j'essaie de les diviser en seulement 4 (par exemple) nombres (moins que le nombre de variables) il renvoie l'erreur 'pas assez de variables à décomposer'. Je veux que je puisse entrer n'importe quel nombre de chiffres (jusqu'au maximum, qui dans ce cas est 10) et il triera les chiffres donnés, les imprimera, mais il n'imprimera pas les autres variables.

C'est ce que j'ai fait jusqu'à présent :

a, b, c, d, e, f, g, h, i, j = input("enter up to 10 digits").split()
nlist=(a, b, c, d, e, f, g, h, i, j)
def bubbleSort():
    for l in range(len(nlist)-1,0,-1):
        for k in range(l):
            if nlist[k]>nlist[k+1]:
                temp = nlist[k]
                nlist[k] = nlist[k+1]
                nlist[k+1] = temp

bubbleSort(nlist)
print(nlist)

Je sais que ce document contient probablement beaucoup d'erreurs. Si quelqu'un pouvait m'aider à trouver une méthode plus efficace et plus correcte, je lui en serais très reconnaissant.

Je me demande aussi comment je pourrais faire pour qu'une fois que j'ai entré les chiffres, je puisse trouver la moyenne, le mode, le milieu et l'étendue des chiffres ?

4voto

Ryan Haining Points 5355

Il semble que vous ne sachiez pas très bien ce que l'on attend de vous pour utiliser le fractionnement. Sur vos deux premières lignes, vous décompressez une liste, puis reconstruisez immédiatement la liste :

a, b, c, d, e, f, g, h, i, j = input("enter numbers").split()
nlist=(a, b, c, d, e, f, g, h, i, j) # note you actually want [] not ()

Si vous remplacez () autour de votre nlist par [] (puisque vous faites muter la liste), cela équivaudrait à ce qui suit pour vos cas valides

nlist = input("enter numbers").split()

Vous n'avez pas du tout besoin de déballer. Notez, cependant, que nlist sera toujours une séquence de str si vous voulez une liste de int vous avez plusieurs possibilités.

# 1) list comprehension
nlist = [int(i) for i in input("enter numbers").split()]

# 2) map
nlist = map(int, input("enter numbers").split())

Les questions supplémentaires comprennent :

1) Vous définissez bubbleSort pour qu'il prenne zéro argument, mais vous l'appelez avec un seul. nlist est un global, ce qui n'est pas génial. Vous feriez mieux de diviser votre code en un couple de fonctions

def bubbleSort(nlist):
    ...

def main():
   nlist = # choose from the above options
   bubbleSort(nlist)
   print(nlist)

if __name__ == '__main__': # only run if module is being run directly
    main()

2) Vous ne pouvez pas assigner aux éléments d'un tuple. Un tuple est une séquence entourée de () comme vous l'avez fait dans votre code original pour nlist . Cela ne marchera pas

>>> items = (1, 2, 3)
>>> items [0] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

utiliser une liste à la place en entourant la séquence avec []

>>> items = [1, 2, 3]
>>> items [0] = 4 # fine

3) Les affectations multiples en python signifient que vous n'avez pas à utiliser l'ancien idiome de l'échange. Au lieu d'un code comme

temp = a
a = b
b = temp

Vous pouvez simplement écrire

a, b = b, a

Cette technique permet de nettoyer un peu votre code lorsque vous déplacez des éléments dans la liste.

0voto

T.Nel Points 740

D'abord vous voulez obtenir l'entrée comme une liste

input_list = map(int, input("enter up to 10 numbers").split())

Ensuite, vous voulez le trier :

input_list.sort()

ou si vous voulez garder une version avec l'ordre original :

sorted_list = sorted(input_list)

Vous pouvez ensuite l'imprimer :

print(sorted_list)

Si vous voulez limiter votre utilisateur à 10 entrées, utilisez une boucle pour l'entrée :

continue_ = True
while continue_:
    input_list = input("enter up too 10 numbers").split()
    continue_ = len(input_list) >= 10

Le code final est :

continue_ = True
while continue_:
    input_list = map(int, input("enter up too 10 numbers").split())
    continue_ = len(input_list) >= 10
sorted_list = sorted(input_list)
print(sorted_list)

0voto

kchawla-pi Points 312

Si c'est votre objectif et que ce n'est pas un exercice d'entraînement que vous faites, alors faites-le :

nums = sorted([int(num) for num in input('Enter the numbers here:').split()])

0voto

mshsayem Points 5271

Les autres réponses ont une bonne explication. Je ne fais que montrer une voie. Ce que vous essayez d'atteindre peut être fait de cette façon :

print(sorted(map(int,input().split())))

Brève explication :

  • input prend en entrée une chaîne de chiffres séparés par des espaces
  • split() les divisera en une liste de chaînes de chiffres (toujours str )
  • map(int, ...) convertira ces chaînes en int (maintenant ce sont des chiffres)
  • sorted triera les chiffres
  • print imprimera

Et voici une version fantaisiste de ce qui précède pour limiter la saisie à 10 chiffres :

print('Enter 10 numbers. Press Enter after each number:')
print(sorted(int(f()) for f in [input]*10))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X