2017-10-07 5 views
0

Je suis nouveau sur Python, donc c'est probablement quelque chose de très basique. J'ai trouvé des questions similaires sur Stackoverflow et d'autres endroits, mais pas exactement la même chose. J'essaie d'écrire un programme Python pour mettre à jour une base de données SQLite. La base de données a trois colonnes, article, quantité, prix. Auparavant, j'avais mis à jour la base de données en insérant ces valeurs pour chacune de ces colonnes dans mon code, mais maintenant je veux faire la même chose en utilisant l'entrée de l'utilisateur.Choix de l'entrée de l'utilisateur en utilisant while boucles et si boucles en python

J'espère que vous verrez à partir de mon code que j'ai créé 3 fonctions pour créer une table, insérer des données dans la table et une pour voir les données présentes dans la table.

En utilisant une variable user_choice Ensuite, je demande à l'utilisateur ce qu'ils veulent faire avec le programme. Je tente de gérer les erreurs d'abord en convertissant l'entrée en chaîne, ensuite en la changeant en minuscule, et troisièmement en utilisant une boucle while. La boucle while doit boucler si l'entrée n'est pas i ou v, ou si l'entrée est validée, la condition doit être satisfaite pour quitter la boucle.

Le problème se produit à la boucle while je crois. La variable n'est jamais validée et elle entre toujours dans la boucle while et y reste. Même alors, à chaque fois qu'il boucle, il est possible que la variable user_choice soit modifiée, mais à nouveau, elle ne sera jamais validée.

Quelqu'un pourrait-il me dire ce qui ne va pas? Je suis désireux d'apprendre.

import sqlite3 

def create_table(): 
    conn=sqlite3.connect("lite.db") 
    cur=conn.cursor() 
    cur.execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)") 
    conn.commit() 
    conn.close() 

def insert_data(item, quantity, price): 
    conn=sqlite3.connect("lite.db") 
    cur=conn.cursor() 
    cur.execute("INSERT INTO store VALUES (?,?,?)",(item, quantity, price)) 
    conn.commit() 
    conn.close() 

def view_data(): 
    conn=sqlite3.connect("lite.db") 
    cur=conn.cursor() 
    cur.execute("SELECT * FROM store") 
    rows=cur.fetchall() 
    conn.close() 
    return rows 

create_table() 

user_choice=str(input("What would you like to do? \n Insert data (I) \n View data (V) \n Enter your choice, I or V: ")) 
user_choice=user_choice.lower 
print(user_choice) 

while user_choice not in ['i','v']: 
    print ("Your choice is invalid. Please try again.") 
    user_choice=input("Choose I or V: ") 
    user_choice=user_choice.lower 

if user_choice == 'i': 
    user_input = input("Enter the item, quantity and price you want to update: ") 
    input_list = user_input.split(',') 
    item=str(input_list[0]) 
    quantity=int(input_list[1]) 
    price=float(input_list[2]) 
    insert_data(item,quantity,price) 
elif user_choice == 'v': 
    print(view_data()) 

Répondre

0

Vous avez fait une erreur facilement réparable :). Tout ce que vous devez faire est de changer cette ligne:

user_choice=user_choice.lower 

Pour celui-ci:

user_choice=user_choice.lower() 

Cette ligne se produit deux fois, une fois en dehors de votre boucle while et une fois à l'intérieur, assurez-vous de modifier à la fois. Le problème était que vous n'appeliez pas la fonction lower() car vous n'aviez pas les parenthèses à la fin.

+0

Merci beaucoup! Apparemment, je ne peux pas encore l'emporter, mais prenez mes remerciements à la place. – Jimmy9zz

+0

Toujours heureux de vous aider! – Steampunkery