16道关于Python基础方面的练习题
1.有一個數(shù)據(jù)list of dict如下
a = [{"test1": "123456"},{"test2": "123456"},{"test3": "123456"},]寫入到本地一個txt文件,內(nèi)容格式如下:
test1,123456test2,123456test3,123456解題思路
1.打開文件
2.循環(huán)列表,提取字典
3.提取key,value
4.寫入文件
答案
lists = [{"yoyo1": "111111"},{"yoyo2": "222222"},{"yoyo3": "333333"}, ]with open("test.txt", "w+", encoding="utf-8") as f:for data in lists:for key, value in data.items():f.write(f"{key},{value}\n")2.題目
a = [1, 2, 3, 4, 5] b = ["a", "b", "c", "d", "e"]如何得出
c = ["a1", "b2", "c3", "d4", "e5"]解題思路
1.a、b兩個列表長度一致,獲取長度
2.一個for循環(huán),每次獲取同下標值
3.字符串拼接,添加到c列表
答案
a = [1, 2, 3, 4, 5] b = ["a", "b", "c", "d", "e"] c = [] # 方案一 for i in a:inx = a.index(i)d = b[inx]if d != -1:c.append(f"{d}{i}") print(c)# 方案二 c = [] for i in range(0, len(a)):a1 = a[i]b1 = b[i]c.append(f"{b1}{a1}") print(c)3.寫一個小程序:
控制臺輸入郵箱地址(格式為 username@companyname.com), 程序識別用戶名和公司名后,將用戶名和公司名輸出到控制臺。
要求:
1.校驗輸入內(nèi)容是否符合規(guī)范(xx@polo.com), 如是進入下一步,如否則拋出提 示"incorrect email format"。注意必須以.com 結(jié)尾
2.可以循環(huán)“輸入–輸出判斷結(jié)果”這整個過程
3.按字母 Q(不區(qū)分大小寫)退出循環(huán),結(jié)束程序
解題思路
1.固定以.com結(jié)尾,用正則匹配
2.以 @ 和 . 分割字符串
3.提取username和companyname
答案
''' 學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' while True:email = input("請輸入郵箱:")if email.upper() == "Q":breakres = re.findall(".com$", email)if not res:print("incorrect email format")temp = email.split("@")name = temp[0]com = temp[1].split(".")[0]print(f"username:{name} , companyName:{com}")4.如果一個 3 位數(shù)等于其各位數(shù)字的立方和,則稱這個數(shù)為水仙花數(shù)。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數(shù)
那么問題來了,求1000以內(nèi)的水仙花數(shù)(3位數(shù))
解題思路
1.int轉(zhuǎn)字符串序列,獲取到每一位數(shù)
2.調(diào)用math.pow函數(shù)求立方和
3.三個數(shù)字立方和相加
答案
lists = [] for i in range(101, 1000):i = str(i)i1, i2, i3 = int(i[0]), int(i[1]), int(i[2])if int(i) == int(math.pow(i1, 3) + math.pow(i2, 3) + math.pow(i3, 3)):lists.append(i)print(lists)5.打印99乘法表
解題思路
1.外層循環(huán),獲取被乘數(shù)
2.內(nèi)層循環(huán),獲取乘數(shù)
答案
''' 學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' for i in range(1, 10):strs = ""for j in range(1, i + 1):strs += f"{i}*{j}={i * j} "print(strs)6.題目
問題1.對列表a 中的數(shù)字從小到大排序
問題2.排序后去除重復的數(shù)字
a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]解題思路
1.非算法方案
- 內(nèi)置排序函數(shù)
- 內(nèi)置去重函數(shù)
- 內(nèi)置列表函數(shù)
2.算法方案
- 冒泡算發(fā)排序
- 內(nèi)置去重函數(shù)
- 內(nèi)置列表函數(shù)
答案
# 非算法方案 a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 6, 8] a = sorted(a) a = set(a) a = list(a) print(a)# 算法方案 a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 6, 8] for i in range(0, len(a) - 1):for j in range(0, len(a) - 1 - i):if a[j] > a[j + 1]:a[j], a[j + 1] = a[j + 1], a[j]a = set(a) a = list(a) print(a)7.如果有一個列表a=[1,3,5,7,11]
問題:
1.如何讓它反轉(zhuǎn)成[11,7,5,3,1]
2.取到奇數(shù)位值的數(shù)字,如[1,5,11]
解題思路
問題一:非算法方案
直接調(diào)用內(nèi)置函數(shù)或切片
問題一:算法方案
- for循環(huán),循環(huán)次數(shù)取列表長度的一半
- 頭尾對稱位置的值互換
問題二
切片,設置步長
答案
""" 如果有一個列表a=[1,3,5,7,11] 問題:1如何讓它反轉(zhuǎn)成[11,7,5,3,1] """ # 非算法方案一 a = [1, 3, 5, 7, 11] a = a[::-1] print(a)# 非算法方案二 a = [1, 3, 5, 7, 11] a.reverse() print(a)# 算法 a = [1, 3, 5, 7, 11] lens = len(a) for i in range(0, int(lens / 2)):a[i], a[lens - i - 1] = a[lens - i - 1], a[i] print(a)""" 如果有一個列表a=[1,3,5,7,11] 問題:2.取到奇數(shù)位值的數(shù)字,如[1,5,11] """ a = [1, 3, 5, 7, 11] a = a[::2] print(a)8.要求:判斷數(shù)組元素是否對稱。
例如[1,2,0,2,1],[1,2,3,3,2,1]這樣的都是對稱數(shù)組
用Python代碼判斷,是對稱數(shù)組打印True,不是打印False
如:
x = [1, "a", 0, "2", 0, "a", 1]解題思路
- 循環(huán)取值,循環(huán)次數(shù)只需要列表長度的一半
- 每次取頭尾對稱下標的值比較
答案
''' 學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' a, b, c = [1, 2, 0, 2, 1], [1, 2, 3, 3, 2, 1], [1, 2, 3, 4, 5]def duicheng(lists):lens = len(lists)flag = Truefor i in range(0, int(lens / 2)):if lists[i] != lists[lens - 1 - i]:flag = Falsebreakprint(flag)duicheng(a) duicheng(b) duicheng(c)9.已知一個數(shù)列:1、1、2、3、5、8、13、。。。。的規(guī)律為從 3 開始的每一項都 等于其前兩項的和,這是斐波那契數(shù)列。
求滿足規(guī)律的 100 以內(nèi)的所以數(shù)據(jù)
解題思路
- 初始化列表[1,1]
- 循環(huán),從第三個下標開始的值都等于前一位的值+前前一位的值
- 若新的值已大于100則跳出循環(huán)
答案
a = [1, 1] for i in range(2, 100):sum = a[i - 1] + a[i - 2]if sum > 100:breaka.append(sum) print(a)10.使用列表生成式語法,將列表中[1, 3, -3, 4, -2, 8, -7, 6],找出大于0的數(shù)
解題思路
列表生成式 + 三元表達式
答案
a = [1, 3, -3, 4, -2, 8, -7, 6] a = [x for x in a if x > 0] print(a)11.如果一個正整數(shù)等于除它本身之外其他所有除數(shù)之和,就稱之為完全數(shù)。
例如:
6是完全數(shù),*因為6 = 1+2+3;
下一個完全數(shù)是28 = 14+7+4+2+1。
求1000以下的完全數(shù)
解題思路
1.外循環(huán)6-1000以內(nèi)的數(shù)字
2.內(nèi)循環(huán)當前數(shù)字,得到所有整除數(shù),并添加到一個列表
3.列表求和比較當前數(shù)字是否一致
答案
all = [] for num in range(6, 1001):lists = []for n in range(1, num):if num % n == 0:lists.append(n)if sum(lists) == num:all.append(num) print(all)12.請寫一個函數(shù)find_odd,參數(shù)是1個列表,請返回該列表中出現(xiàn)奇數(shù)次的元素
比如
find_odd([1, 1, 2, -2, 5, 2, 4, 4, -1, -2, 5]) ? -1 find_odd([20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5]) ? 5 find_odd([10]) ? 10解題思路
1.循環(huán)列表
2.調(diào)用列表內(nèi)置統(tǒng)計函數(shù)計算當前元素出現(xiàn)次數(shù)
3.出現(xiàn)次數(shù)模2是否不等于0
答案
''' 學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def find_odd(lists):res = []for i in lists:if lists.count(i) % 2 != 0:if i not in res:res.append(i)print(res)lists = [1, 1, 2, -2, 5, 2, 4, 4, -1, -2, 5] list1 = [20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5] list2 = [10, 1, 1, 1, 2, 2, 10, 5] find_odd(lists) find_odd(list1) find_odd(list2)13.寫一個函數(shù),該函數(shù) 參數(shù)為1個字符串,請分析并返回包含字符串中所有大寫字母索引的有序列表。
比如
indexOfCaps("eDaBiT") ? [1, 3, 5] indexOfCaps("eQuINoX") ? [1, 3, 4, 6] indexOfCaps("determine") ? []解題思路
- 字符串也是序列,可以循環(huán)獲取每個字符
- 調(diào)用字符串內(nèi)置函數(shù)判斷是否大寫
答案
def indexOfCaps(strs):res = []num = 0for i in strs:if i.isupper():res.append(num)num += 1print(res)indexOfCaps("eDaBiT") indexOfCaps("eQuINoX") indexOfCaps("determine")14.請寫一個函數(shù),該函數(shù) 參數(shù)為數(shù)字列表,請算出另外一個列表,里面每個元素依次是參數(shù)列表里面元素的累計和。
比如
參數(shù)為[1, 2, 3, 4]
結(jié)果計算方法為[1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4]
返回結(jié)果就應該是[1, 3, 6, 10]
解題思路
1.外循環(huán)獲取列表每個元素
2.內(nèi)循環(huán)獲取當前元素and 之前的所有元素,最后相加
3.為了不影響原列表的值,需要新創(chuàng)建一個列表來存放相加后的值
答案
def count_test(lists):res = []lens = len(lists)for i in range(0, lens):res.append(lists[i])for j in range(0, i):res[i] += lists[j]print(res)lists = [1, 2, 3, 4] count_test(lists)15.請寫一個函數(shù),該函數(shù) 參數(shù)為一個字符串,請驗證該字符串是否是一個合法的電話號碼,合法返回True,否則返回False
規(guī)則如下
1、該字符串必須全部都是數(shù)字。
2、該字符串長度為11位。
3、該字符必須以數(shù)字1開頭。
比如
解題思路
正則匹配,有則True,無則False
答案
''' 學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def validate_phone(strs):res = re.findall("^1[0-9]{10}", strs)if res:return Truereturn Falseprint(validate_phone("13423445566")) print(validate_phone(".23rfs"))16.寫一個函數(shù)replace,該函數(shù)參數(shù)是兩個字符串,
第一個參數(shù)給出一個源,
第二個參數(shù)是指定范圍。
要求該函數(shù)將 第一個參數(shù)里面的字符串中 落在第二個參數(shù)指定范圍內(nèi)的字符串替換為 # 號
比如
replace("abcdef", "c-e") ? "ab###f" replace("rattle", "r-z") ? "#a##le" replace("microscopic", "i-i") ? "m#croscop#c" replace("", "a-z") ? ""解題思路
1.先將指定范圍的字母提取出來
2.Python里面,字符是可以直接比較大小的
3.通過直接比較,將在指定范圍的字符 replace 成 #
答案
def replace(strs, round):start, end = round.split("-")for i in strs:if i >= start and i <= end:strs = strs.replace(i, "#")print(strs)replace("abcdef", "c-e") replace("rattle", "r-z") replace("microscopic", "i-i") replace("", "a-z")結(jié)尾給大家推薦一個非常好的學習教程,希望對你學習Python有幫助!
Python基礎入門教程推薦:更多Python視頻教程-關注B站:Python學習者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web
Python爬蟲案例教程推薦:更多Python視頻教程-關注B站:Python學習者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web
總結(jié)
以上是生活随笔為你收集整理的16道关于Python基础方面的练习题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础教程:列表(list)切
- 下一篇: Python 数据处理函数 round(