1
votes

Comment puis-je autoriser un utilisateur à saisir des éléments de liste individuels dans une liste de listes?

J'essaie de créer des enregistrements de la manière la plus simple possible pour permettre aux utilisateurs de saisir des éléments dans une liste, qui est stockée dans une plus grande liste de listes, tout fonctionne lorsqu'il est codé manuellement mais pas lorsqu'il est exécuté comme une invite prenant des entrées de l'utilisateur

myitems = [[1,"Item1",100,0],[2,"Item2",150,0],[3,"Item3",75,0],[4,"Item4",20,0],[5,"Item5",15,0]]

def printall():
    for x in myitems: 
        print (x[0],x[1],x[2],x[3],x[4],x[5],x[6])

def new():
    userinput = input("New?:")
    if userinput == "y":
        userinput = int(input("Please enter a number:"))
        myitems.append(userinput[0])
        userinput = input("Please enter a name:")
        myitems.append(userinput[1])

Comme vous pouvez le voir, j'ai codé directement dans 5 enregistrements et j'essaie d'autoriser l'utilisateur à en ajouter de nouveaux à mes éléments, mais je ne comprends pas comment les autoriser à ajoutez des éléments individuels dans une liste, puis stockez-les avec d'autres listes


3 commentaires

avant de l'ajouter directement à la liste myitems > myitems.append (userinput [0]) , prenez toutes les entrées de l'utilisateur et stockez-les dans un templist puis ajoutez ce templist dans myitems


userinput [0] c'est faux


Printall imprime trop d'éléments


4 Réponses :


1
votes

Il y a tellement de choses qui ne vont pas dans votre code. La fonction pritall imprime trop d'éléments, des éléments qui ne sont pas dans la liste myitems . Ceci est fait pour que vous parcouriez la liste et imprimiez chaque élément que vous avez rencontré. Autre chose, lorsque vous souhaitez ajouter quelque chose à une liste de listes, le type de données que vous ajoutez doit être une liste. Vous devez donc collecter les entrées de l'utilisateur et en faire une liste. Ajoutez ensuite cette liste à une liste de listes.

Voici ce que vous voulez:

myitems = [[1,"Item1",100,0],[2,"Item2",150,0],[3,"Item3",75,0],[4,"Item4",20,0],[5,"Item5",15,0]]

def printall():
    for x in myitems: 
        print(x)

def new():
    userinput = input("New?:")
    if userinput == "y":
        userinput_number = int(input("Please enter a number:"))
        userinput_name = input("Please enter a name:")
        entry = [len(myitems), userinput_number, userinput_name, 0]
        myitems.append(entry)


3 commentaires

Est-ce que ça te va? J'ai posté un code à partir duquel tout ce qui ne va pas avec le code d'origine peut être vu, mais maintenant j'ai ajouté les explications textuelles.


Vous avez raison de dire que la fonction printall imprime trop de choses, je l'ai modifiée pour cet article, mais plus tard, je devrai la modifier pour n'imprimer que des valeurs d'index spécifiques, c'est pourquoi je l'ai configurée comme ça.


Vous pouvez passer les indices comme arguments à la fonction printall . Mais je suggérerais de changer le nom haha



2
votes

À partir des commentaires de la question d'origine:

Please enter a number:6
Please enter a name:item6
1 Item1 100 0
2 Item2 150 0
3 Item3 75 0
4 Item4 20 0
5 Item5 15 0
6 item6

SORTIE:

myitems = [[1,"Item1",100,0],[2,"Item2",150,0],[3,"Item3",75,0],[4,"Item4",20,0],[5,"Item5",15,0]]
tempList = []

# Function print_all

def printall():
    for x in myitems:
        print(*x)       

# Function new()

def new():
    userinput = int(input("Please enter a number:"))
    tempList.append(userinput)

    userinput = input("Please enter a name:")
    tempList.append(userinput)

    myitems.append(tempList[:])
    tempList.clear()
    printall()

# Calling the function
new()


9 commentaires

Si vous ne recherchez pas un templiste d'une manière ou d'une autre, vous passerez un mauvais moment.


Essayez d'ajouter deux éléments avec ce code pour voir ce que je veux dire


@MadPhysicist noté et modifié.


Veuillez ne pas publier la sortie de la console sous forme de capture d'écran. Utilisez plutôt un bloc de code. Publiez ensuite une exécution qui ajoute deux entrées à la liste (appelez nouveau deux fois). Votre code est toujours cassé.


@MadPhysicist l'a corrigé.


Vous avez encore une capture d'écran


Mais oui, vous faites maintenant une copie de templist. Dans le même temps, votre indentation semble avoir été gâchée et votre fonction printall imprime chaque élément dans une entrée sur une ligne distincte. Essayez pour x dans mes éléments: print (* x)


@MadPhysicist trop de caféine pour la journée!


Je comprends. Pourriez-vous s'il vous plaît supprimer la capture d'écran et la remplacer par du texte s'il vous plaît?



1
votes

Je pense que c'est la méthode la plus simple:

myitems = [[1, "Item1", 100, 0], [2, "Item2", 150, 0], [3, "Item3", 75, 0], [4, "Item4", 20, 0], [5, "Item5", 15, 0]]

def printall():
    for x in myitems:
        print(x[0], x[1], x[2], x[3])

def new():
    userinput = input("New?:")
    if userinput == "y":
        new = []
        userinput = int(input("Please enter first number:"))
        new.append(userinput)
        userinput = input("Please enter a name:")
        new.append(userinput)
        userinput = int(input("Please enter second number:"))
        new.append(userinput)
        userinput = int(input("Please enter second number:"))
        new.append(userinput)
        myitems.append(new)

new()
printall()


0 commentaires

2
votes

Votre code était vraiment difficile à comprendre, donc je viens de le réécrire pour que vous puissiez en comprendre l'essentiel:

items = []

def add_items():
  number = int(input("Number: "))
  name = input("Name: ")
  items.append([name, number])

if __name__ == "__main__":
  while input("New?") == "y":
    add_items()
  print(items)


0 commentaires