Python基础练习题合集
1.有一個數據list of dict如下:
a = [{"test1": "123456"},{"test2": "123456"},{"test3": "123456"},]寫入到本地一個txt文件,內容格式如下:
test1,123456test2,123456test3,123456解題思路
- 打開文件
- 循環列表,提取字典
- 提取key,value
- 寫入文件
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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”]
解題思路
- a、b兩個列表長度一致,獲取長度
- 一個for循環,每次獲取同下標值
- 字符串拼接,添加到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), 程序識別用戶名和公司名后,將用戶名和公司名輸出到控制臺。
要求:
解題思路
- 固定以.com結尾,用正則匹配
- 以 @ 和 . 分割字符串
- 提取username和companyname
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和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 位數等于其各位數字的立方和,則稱這個數為水仙花數。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數
那么問題來了,求1000以內的水仙花數(3位數)
解題思路
- int轉字符串序列,獲取到每一位數
- 調用math.pow函數求立方和
- 三個數字立方和相加
答案
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乘法表
解題思路
- 外層循環,獲取被乘數
- 內層循環,獲取乘數
答案
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 中的數字從小到大排序,問題2.排序后去除重復的數字
a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]解題思路
非算法方案
- 內置排序函數
- 內置去重函數
- 內置列表函數
算法方案
- 冒泡算發排序
- 內置去重函數
- 內置列表函數
答案
# 非算法方案 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如何讓它反轉成[11,7,5,3,1]
2.取到奇數位值的數字,如[1,5,11]
解題思路
問題一:非算法方案
直接調用內置函數或切片
問題一:算法方案
- for循環,循環次數取列表長度的一半
- 頭尾對稱位置的值互換
問題二
切片,設置步長
答案
""" 如果有一個列表a=[1,3,5,7,11] 問題:1如何讓它反轉成[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.取到奇數位值的數字,如[1,5,11] """ a = [1, 3, 5, 7, 11] a = a[::2] print(a)8.要求:判斷數組元素是否對稱。
例如[1,2,0,2,1],[1,2,3,3,2,1]這樣的都是對稱數組用Python代碼判斷,是對稱數組打印True,不是打印False,如:x = [1, "a", 0, "2", 0, "a", 1]
解題思路
- 循環取值,循環次數只需要列表長度的一半
- 每次取頭尾對稱下標的值比較
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和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.已知一個數列:1、1、2、3、5、8、13、。。。。的規律為從 3 開始的每一項都 等于其前兩項的和,這是斐波那契數列。
求滿足規律的 100 以內的所以數據
解題思路
- 初始化列表[1,1]
- 循環,從第三個下標開始的值都等于前一位的值+前前一位的值
- 若新的值已大于100則跳出循環
答案
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的數
解題思路
列表生成式 + 三元表達式
答案
a = [1, 3, -3, 4, -2, 8, -7, 6] a = [x for x in a if x > 0] print(a)11.如果一個正整數等于除它本身之外其他所有除數之和,就稱之為完全數。
例如:
6是完全數,* 因為6 = 1+2+3;下一個完全數是28 = 14+7+4+2+1。
求1000以下的完全數
解題思路
- 外循環6-1000以內的數字
- 內循環當前數字,得到所有整除數,并添加到一個列表
- 列表求和比較當前數字是否一致
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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.請寫一個函數find_odd,參數是1個列表,請返回該列表中出現奇數次的元素
比如
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解題思路
- 循環列表
- 調用列表內置統計函數計算當前元素出現次數
- 出現次數模2是否不等于0
答案
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.寫一個函數,該函數 參數為1個字符串,請分析并返回包含字符串中所有大寫字母索引的有序列表。
比如
indexOfCaps("eDaBiT") ? [1, 3, 5] indexOfCaps("eQuINoX") ? [1, 3, 4, 6] indexOfCaps("determine") ? []解題思路
- 字符串也是序列,可以循環獲取每個字符
- 調用字符串內置函數判斷是否大寫
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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.請寫一個函數,該函數 參數為數字列表,請算出另外一個列表,里面每個元素依次是參數列表里面元素的累計和。
比如 參數為[1, 2, 3, 4]
結果計算方法為[1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4]
返回結果就應該是[1, 3, 6, 10]
解題思路
- 外循環獲取列表每個元素
- 內循環獲取當前元素and 之前的所有元素,最后相加
- 為了不影響原列表的值,需要新創建一個列表來存放相加后的值
答案
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.請寫一個函數,該函數 參數為一個字符串,請驗證該字符串是否是一個合法的電話號碼,合法返回True,否則返回False
規則如下
1、該字符串必須全部都是數字。
2、該字符串長度為11位。
3、該字符必須以數字1開頭。
比如
validate_phone("13423445566") ? True validate_phone(".23rfs") ? False解題思路
正則匹配,有則True,無則False
答案
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.寫一個函數replace,該函數參數是兩個字符串,第一個參數給出一個源,第二個參數是指定范圍。
要求該函數將 第一個參數里面的字符串中 落在第二個參數指定范圍內的字符串替換為 # 號
比如
replace("abcdef", "c-e") ? "ab###f" replace("rattle", "r-z") ? "#a##le" replace("microscopic", "i-i") ? "m#croscop#c" replace("", "a-z") ? ""解題思路
- 先將指定范圍的字母提取出來
- Python里面,字符是可以直接比較大小的
- 通過直接比較,將在指定范圍的字符 replace 成 #
答案
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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")17.寫一個函數alphabet_index,該函數參數是1個字符串,要求該函數返回一個新字符串,里面是 參數字符串中每個字母依次對應的 數字。如果是非字母,則忽略它
字母"a" 和"A" 都對應 1, "b"和"B"都對應2, "c"和"C"對應3, 依次類推
比如
alphabet_index("Wow, does that work?") ? "23 15 23 4 15 5 19 20 8 1 20 23 15 18 11"alphabet_index("The river stole the gods.") ? "20 8 5 18 9 22 5 18 19 20 15 12 5 20 8 5 7 15 4 19"alphabet_index("We have a lot of rain in June.") ? "23 5 8 1 22 5 1 12 15 20 15 6 18 1 9 14 9 14 10 21 14 5"解題思路
- 將字符串統一為大寫字母
- 需要設置一個對比值
- 大寫A的ASCII碼為65,但A對應1,所以設置一個對比值為64
- 循環字符串,如果是字母則換算出它的ASCII碼,再減去對比值
答案
def alphabet_index(strs):strs = strs.upper()temp = 64res = ""for i in strs:if i.isalpha():res += str(ord(i) - temp) + " "print(res)alphabet_index("Wow, does that work?") alphabet_index("The river stole the gods.") alphabet_index("We have a lot of rain in June.")總結
以上是生活随笔為你收集整理的Python基础练习题合集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础教程:两个list之间移
- 下一篇: Python字符串常用函数详解