在python

时间:2017-10-07 13:14:58

标签: python validation loops while-loop sqlite

我是Python的新手,所以这可能是非常基础的东西。我在Stackoverflow和其他地方发现了类似的问题,但不完全相同。

我正在尝试编写一个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())

1 个答案:

答案 0 :(得分:0)

你犯了一个容易修复的错误:)。你所要做的就是改变这一行:

  Observable.fromEvent(window, 'scroll')
      .map((event: any) => event.currentTarget)
      .subscribe((event) => {
        this._renderScrollBar(event);
      });
  let x = 0;
  Observable.of(0, animationFrame)
      .repeat()
      .takeUntil(Observable.timer(1000))
      .subscribe(() => console.log(x++));
}

对此:

user_choice=user_choice.lower

此行发生两次,一次在while循环之外,一次在内部,因此请确保更改两者。问题是,你没有调用user_choice=user_choice.lower() 函数,因为你最后没有括号。