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
4 Réponses :
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)
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
À 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()
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?
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()
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)
avant de l'ajouter directement à la liste
myitems>myitems.append (userinput [0]), prenez toutes les entrées de l'utilisateur et stockez-les dans untemplistpuis ajoutez cetemplistdansmyitemsuserinput [0]c'est fauxPrintall imprime trop d'éléments