1. 程式人生 > >請編寫函式,在Sqlite中根據分數段查詢指定的名字 —— python學習筆記

請編寫函式,在Sqlite中根據分數段查詢指定的名字 —— python學習筆記

1. 題目:

請編寫函式,在 Sqlite 中根據分數段查詢指定的名字:

題目是廖雪峰老師的python教程中 SQLite 的練習。
本篇博文只是針對這一題目,沒有做詳細的介紹,如果看不懂可以在下面評論問我,我會及時回覆的。

2. 程式碼如下:

2.1 我個人的解法

本次的題目還是具有一些難度的,分別包括準備資料(建立資料庫,建立表,插入資料)和查詢資料兩個部分,所以程式碼比較比較詳細,做了相應的註釋。

第一部分:準備資料

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2019/1/6 11:46
# @Author : Arrow and Bullet # @FileName: publish.py # @Software: PyCharm # @Blog :https://blog.csdn.net/qq_41800366 import os import sqlite3 # 匯入SQLite驅動: db_file = os.path.join(os.path.dirname(__file__), 'test.db') # 資料庫的建立 if os.path.isfile(db_file): # 如果存在這個同名檔案的話刪除掉 os.remove(db_file)
# 初始資料: conn = sqlite3.connect(db_file) # 連線到SQLite資料庫 cursor = conn.cursor() # 建立一個Cursor: cursor.execute('create table user(id varchar(20) primary key, name varchar(20), score int)') # 執行一條SQL語句,建立user表: cursor.execute(r"insert into user values ('A-001', 'Adam', 95)") # 繼續執行一條SQL語句,插入一條記錄:
cursor.execute(r"insert into user values ('A-002', 'Bart', 62)") # 繼續執行一條SQL語句,插入一條記錄: cursor.execute(r"insert into user values ('A-003', 'Lisa', 78)") # 繼續執行一條SQL語句,插入一條記錄: cursor.close() # 關閉Cursor: conn.commit() # 提交事務: conn.close() # 關閉Connection:

第二部分:查詢資料

import sqlite3  # 匯入SQLite驅動:
from operator import itemgetter 

def get_score_in(low, high):
    # 返回指定分數區間的名字,按分數從低到高排序
    conn = sqlite3.connect('test.db')
    cursor = conn.cursor()
    cursor.execute('select * from user')   # 執行查詢語句 
    values = cursor.fetchall()      # 獲得查詢結果集,結果集是一個list,每個元素為一個tuple
    values = sorted(values, key=itemgetter(2))      # 通過sorted 根據分數來對結果集排序
    result = [] 
    for i in values:    # 迴圈
        if low <= i[2] <= high:     # 篩選
            result.append(i[1])     # 結果
    return result       # 返回

# 測試:
print(get_score_in(80, 95))
print(get_score_in(60, 80))
print(get_score_in(60, 100))
assert get_score_in(80, 95) == ['Adam'], get_score_in(80, 95)
assert get_score_in(60, 80) == ['Bart', 'Lisa'], get_score_in(60, 80)
assert get_score_in(60, 100) == ['Bart', 'Lisa', 'Adam'], get_score_in(60, 100)

print('Pass')

結果如下

# result
# ['Adam']
# ['Bart', 'Lisa']
# ['Bart', 'Lisa', 'Adam']
# Pass

希望能夠幫助到大家,有什麼問題可以 直接評論即可,如果不夠詳細的話也可以說,我會及時回覆的。