用户输入选择使用while循环,如果在Python

问题描述:

圈我是新来的Python所以这可能是一些非常基本的。我发现在Stackoverflow和其他地方的类似问题,但不完全一样。用户输入选择使用while循环,如果在Python

我试图写一个Python程序来更新SQLite数据库。该数据库有三列,项目,数量,价格。以前,我通过将这些列的每个值插入到代码中来更新数据库,但现在我想用用户输入来做同样的事情。

我希望你从我创建了3个功能创建一个表,将数据插入到表中,一个查看表中存在的数据我的代码看。

使用可变user_choice然后我问用户他们想要与程序做什么。 我尝试首先通过将输入转换为字符串来处理错误,其次将其改为小写,然后使用while循环。如果输入不是i或v,或者如果输入被验证,则应该满足条件以退出循环,while循环应该循环。

的问题是在while循环,我相信发生。变量永远不会被验证,它总是进入while循环并停留在那里。尽管如此,每当它循环时,变量user_choice都有可能被更改,但它再次得不到验证。

有人能告诉我发生了什么问题呢?我渴望学习。

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()) 

你犯了一个容易解决的错误:)。所有你需要做的就是改变这一行:

user_choice=user_choice.lower 

这一个:

user_choice=user_choice.lower() 

会出现此线两次,一次while循环外,一旦进入,所以一定要同时改变。问题是,你没有调用lower()函数,因为你最后没有括号。

+0

谢谢!显然我还不能赞成,但请代之以感谢。 – Jimmy9zz

+0

总是乐于帮助! – Steampunkery