Python基础编程题
生活随笔
收集整理的這篇文章主要介紹了
Python基础编程题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有一個銀行賬戶類 Account, 包括名字 , 余額等屬性,方法有存錢、取錢、查詢余額的操作。要求:1.在存錢時,注意存款數據必須是整百的格式2.取錢時,要判斷余額是否充足,余額不夠的時候要提示余額不足注意:余額在外界不能直接調用修改 必須是存錢才可修改
class Account():def __init__(self, name, balance):self.name = nameself.__balance = balance#查詢余額def show_balance(self):print('余額是:{}'.format(self.__balance))#存錢def save_money(self, money):if money > 0 and money % 100 == 0:self.__balance += moneyelse:print(f'存款金額數不滿整百')#取錢def get_money(self, money):if self.__balance >= money:self.__balance -= moneyprint(f'取款成功')else:print('余額不足')
貓類的屬性有昵稱name,年齡age, 方法有抓老鼠鼠類的屬性有昵稱name創建貓對象信息為5歲的tom貓創建老鼠對象信息為名為jerry 執行貓抓老鼠的行為
輸入如下:一只5歲的tom貓抓到一只名叫jerry的老鼠
class Mouse():def __init__(self, name):self.name = name
class Cat():def __init__(self, name, age):self.name = nameself.age = agedef catch(self, mouse):print("一只{}歲的{}貓抓到一只名叫{}的老鼠".format(self.age, self.name, mouse.name))
Jerry_mouse = Mouse('jerry')
Tom_cat = Cat('tom', 5)
Tom_cat.catch(Jerry_mouse)
設計一個狗類:屬性: 品種breed 昵稱name 性別gender行為: 看家lookhome 創建狗類對象: 對象信息如下哈士奇 旺財 雄中華田園犬 來福 雌創建出來對象之后, 調用看家的行為, 輸出 xx在看家 [xx是對象的昵稱]
class Dog():def __init__(self, breed, name, gender):self.breed = breedself.name = nameself.gender = genderdef lookhome(self):print("{}在看家".format(self.name))dog1 = Dog('哈士奇', '旺財', '雄')
dog2 = Dog('中華田園犬', '來福', '雌')dog1.lookhome()
dog2.lookhome()
為一個州立大學建立賬單系統,州內和州外學生的收費標準不同,錄取分數線為300分,高于分數線的不收費,低于分數線的話,州內每學分收費$75,州外每學分$200。每個學生賬單上都顯示學校的名字,學生自己的名字,學分和賬單總額。
州內學生類:屬性:學校名 姓名 學分方法: 計算學費 打印賬單
州外學生類:屬性:學校名 姓名 學分方法:計算學費 打印賬單
分別創建一個州內學生對象 和 州外學生對象 分別打印他們的學費賬單
class Student():def __init__(self, school, name, credit):self.school = schoolself.name = nameself.credit = creditdef tuition(self):'''學費統計默認返回不收費'''return 0def bill_printing(self):print('{}報的學校為{},學分為{},所以學費為{}'.format(self.name, self.school, self.credit, self.tuition()))class InsideStateStudent(Student):'''州內學生,繼承自學生類'''#重構學費函數def tuition(self):if self.credit < 300:return (300 - self.credit) * 75else:# 300分以上 調用父類 收費為0return super().tuition()class OutsideStateStudent(Student):'''州外學生,繼承自學生類'''#重構學費函數def tuition(self):if self.credit < 300:return (300 - self.credit) * 200else:# 300分以上 調用父類 收費為0return super().tuition() #super()用于調用父類的函數#州內學生
inside_stu = InsideStateStudent("可樂大學", "Lucy", 234) #實例化對象
inside_stu.bill_printing() #調用輸出方法#州外學生
outside_stu = OutsideStateStudent("可樂大學", "李雷", 123)
outside_stu.bill_printing()
定義一個點類 Pointer 屬性是橫向坐標 x與 縱向坐標 y定義一個圓類 Circle 屬性有圓心點 cp 與 半徑 radius 方法有: 1.求圓的面積 2.求圓的周? 3.求指定點與圓的關系提示:關系有三種 【圓內 圓外 圓上】 設計到的數學公式:指定點與圓心點之間的距離 與 圓的半徑進行比較
class Pointer():def __init__(self, x, y):self.x = xself.y = yclass Circle():def __init__(self, cp, radius):self.cp = cpself.radius = radiusdef area(self):print("圓的面積:", 3.14*self.radius**2)def perimeter(self):print("圓的周長為:", 3.14*2*self.radius)def relation(self, pointer):if self.radius > ((pointer.x - cp.x)**2 + (pointer.y - cp.y)**2)**0.5:print("點在圓內")elif self.radius == (pointer.x**2 + pointer.y**2)**0.5:print("點在圓上")else:print("點在圓外")pointer = Pointer(x=12, y=13)
cp = Pointer(x=40, y=12)
circle = Circle(cp, 12)
circle.area()
circle.perimeter()
circle.relation(pointer)
?定義一個汽車類Vehicle, 要求: 1.屬性包括:汽車品牌brand、顏色color和速度speed, 其中速度的起始值是0。 2.為屬性提供訪問的方法。注意:汽車品牌一旦初始化之后不能修改。 3.方法有加速、減速。
class Vehicle():def __init__(self, brand, color, speed = 0):self.__brand = brandself.color = colorself.speed = speeddef get_brand(self):return self.__branddef add_speed(self, speed):self.speed += speedprint("現在的車速為:{}".format(self.speed))def subtract_speed(self, speed):if self.speed < speed:print("減速失敗")else:self.speed -= speedprint("當前車速:{}".format(self.speed))car = Vehicle('瑪莎拉蒂', '藍色') print(f'車的品牌是{car.get_brand()}') # 加速 car.add_speed(120) # 減速 car.subtract_speed(40) (1)編寫一個矩形類Rect,包含:矩形的寬width;矩形的高height。要求創建對象的時候必須給width和height傳值 兩個方法:求矩形面積的方法area(),求矩形周長的方法perimeter()(2)通過繼承Rect類編寫一個具有確定位置的矩形類PlainRect,其確定位置用矩形的左上角坐標來標識,包含: 添加兩個屬性:矩形左上角坐標start_x和start_y。要求創建PlainRect對象的時候width和height必須賦值,start_x和start_y可以賦值可以不賦值。 添加一個方法:判斷某個點是否在矩形內部的方法is_inside()。如在矩形內,返回True, 否則,返回False。 class Rect():def __init__(self, width, height):self.width = widthself.height = heightdef area(self):print("矩形面積:", self.width * self.height)def perimeter(self):print("矩形周長:", (self.width+self.height)*2)class PlainRect(Rect):def __init__(self, width, height, start_x = 0, start_y = 0):super().__init__(width, height)self.start_x = start_xself.start_y = start_ydef is_inside(self, x, y):if (self.start_x <= x <= self.start_x + self.width) and (self.start_y <= y <= self.start_y + self.height):return Truereturn False# 創建起始點為0,0 寬高都是100的矩形 pr = PlainRect(100, 100) print(f'矩形的面積是{pr.area()}') print(f'矩形的周長是{pr.perimeter()}') print(f'其他點和矩形的關系{pr.is_inside(100, 17)}') nums = [17, 29, 31, 28, 44, 51, 24] 使用高階函數filter將nums中的能被3整除的數據保留,其他的過濾掉,結果使用列表展示 nums = [17, 29, 31, 28, 44, 51, 24] def num(i):return i % 3 == 0 num_r = list(filter(num, nums)) print(num_r) 封裝一個函數:獲取指定數據的階乘 5的階乘等于5*4*3*2*1 def count(num):result = 1for i in range(1, num + 1):result *= ireturn result print(count(10)) 定義一個函數,比較兩個數的大小如果前者大于后者,返回1如果前者小于后者,返回-1兩者相等,返回0 def num(num1, num2):if num1 > num2:return 1elif num1 < num2:return -1else:return 0 print(num(1,2)) 定義一個函數,判斷一個3位數是不是水仙花數 水仙花數:是一個三位數,并且每位上的立方和結果等于本身 例如 153 = 1 ** 3 + 5 ** 3 + 3 ** 3 def sxh(num):g = num % 10s = num // 10 % 10b = num // 100if g**3 + s**3 + b**3 == num:print(f"{num}是水仙花數")else:print(f"{num}不是水仙花數") sxh(153) 錄入一個字符,獲取其在編碼規則中對應的十進制數據 ch = input('錄入一個字符:')num = ord(ch)print(f'{ch}在編碼規則中對應的十進制數據是{num}') 封裝一個函數:判斷指定數據是不是素數 素數:只能被1和本身整除的大于1的整數 def sushu(num):count = 0if num <= 1:print(f"{num}不是素數")else:for i in range(1, num+1):if num % i == 0:count += 1if count == 2:print(f"{num}是素數")else:print(f"{num}不是素數") sushu(10) 聲明一個列表,在列表中使用字典保存6個學生的信息 students = [{'name': '小花', 'age': 19, 'score': 90, 'gender': '女', 'tel': '15300022839'},{'name': '明明', 'age': 20, 'score': 40, 'gender': '男', 'tel': '15300022838'},{'name': '華仔', 'age': 18, 'score': 90, 'gender': '女', 'tel': '15300022839'},{'name': '靜靜', 'age': 16, 'score': 90, 'gender': '不明', 'tel': '15300022428'},{'name': 'Tom', 'age': 17, 'score': 59, 'gender': '不明', 'tel': '15300022839'},{'name': 'Bob', 'age': 18, 'score': 90, 'gender': '男', 'tel': '15300022839'} ] 要求: 統計不及格學生的個數 統計未成年學生的個數 打印手機尾號是8的學生的名字 students = [{'name': '小花', 'age': 19, 'score': 90, 'gender': '女', 'tel': '15300022839'},{'name': '明明', 'age': 20, 'score': 40, 'gender': '男', 'tel': '15300022838'},{'name': '華仔', 'age': 18, 'score': 90, 'gender': '女', 'tel': '15300022839'},{'name': '靜靜', 'age': 16, 'score': 90, 'gender': '不明', 'tel': '15300022428'},{'name': 'Tom', 'age': 17, 'score': 59, 'gender': '不明', 'tel': '15300022839'},{'name': 'Bob', 'age': 18, 'score': 90, 'gender': '男', 'tel': '15300022839'} ] count1 = 0 #不及格人數 count2 = 0 #未成年人數 for i in students:if i['score'] < 60:count1 += 1if i['age'] <18:count2 += 1if i['tel'][-1] == '8':print(i['name']) print(f'不及格人數{count1}\n未成年人數{count2}') 已知有一段英文語句 sentence = 'Hi Nice to meet you Are you glad to meet me too' 統計每個單詞出現的次數 sentence = 'Hi Nice to meet you Are you glad to meet me too' worlds = sentence.split(' ') w_count_dict = {} for w in worlds:if w in w_count_dict:w_count_dict[w] += 1else:w_count_dict[w] = 1 print(w_count_dict) 已知信息學院的學生共有15人,其中選擇Python、Java、C語言的人分別有 【沒有重名的人 一個名字代表一個人】 python = {'王萌', '李曉麗', '張慧慧', '王曉梅'} java = {'喬榛', '王萌', '齊輝', '趙真真'} c = {'王曉梅', '齊輝', '李慧萌', '王萌'} 求: 沒有參加選課的學生有多少名 三門課程都選的學生有哪些 選擇了兩門課程的學生有哪些 python = {'王萌', '李曉麗', '張慧慧', '王曉梅'} java = {'喬榛', '王萌', '齊輝', '趙真真'} c = {'王曉梅', '齊輝', '李慧萌', '王萌'} # 參加選課的 就對以上的集合求并集 把重復選課的保留1個 就是所有選課的 all_select = python | java | c print(f"還有{15 - len(all_select)}個學生沒有選課") # 三門課程都選的 那就是在3個集合中都有的 求交集 three_select = python & java & c print(f'三門課程全選的學生有{three_select}') # 選擇的兩門的 那就得兩兩交集了 把結果合并 并完之后還會存在一種人就是3門課全選了的 需要把它減掉 two_select = ((python & java) | (python & c) | (java & c)) - three_select print(f'選擇了兩門課程的學生有{two_select}') 在1到10之間隨機選擇5個數添加在列表中,要求這5個數不允許重復 隨機數需要導入模塊random,語句是 import random ele = random.randint(1, 10) # 就是在1到10之間隨機選擇一個數 import random num_list = [] while len(num_list) < 5:ele = random.randint(1, 10)if ele not in num_list:num_list.append(ele) print(num_list) 已知班級中人員姓名如下: names = ['張美', '李歡欣', '趙樂樂', '張佳', '王繼輝', '李美玲'] 需求: 1. 利用列表生成式 獲取姓李的同學 2. 獲取名字長度是2的同學 names = ['張美', '李歡欣', '趙樂樂', '張佳', '王繼輝', '李美玲'] names_li = [n for n in names if n[0] == '李'] print(names_li) names_2 = [n for n in names if len(n) == 2] print(names_2) 已知字符串 s = 'Hello_520_愛你_1314_一生一世_World',要求提取字符串中的數字符號 【期待結果是'5201314'】 s = 'Hello_520_愛你_1314_一生一世_World' digit_str = '' for ch in s:if '0' <= ch <= '9':digit_str += ch print(digit_str) 使用inupt錄入一個圓的半徑,求圓的面積和周長 注:圓周率使用3.14就可以,乘法的運算符是* r = int(input("請輸入圓的半徑:")) s = 3.14 * r ** 2 c = 3.14 * 2 * r print(f"圓的面積為{s},圓的周長為{c}") 假設今天的上課時間為15678秒,編程計算今天上課時間是多少小時,多少分鐘,多少秒;以‘多少時多少分多少秒’的方式表示出來 time = 15678 sec = time % 60 min = time % 3600 // 60 h = time // 3600 print(f"{h}小時{min}分鐘{sec}秒") 水仙花數校驗器:輸入一個三位數,判斷其是不是水仙花數 水仙花數是一個三位數,特點是每位上數的立方和結果是其本身 例如 153 = 1**3 + 5 ** 3 + 3**3 num = int(input("請輸入一個三位數:")) ge = num % 10 shi = num // 10 % 10 bai = num // 100 if ge ** 3 + shi ** 3 + bai ** 3 == num:print(f"{num}是水仙花數") else:print(f"{num}不是水仙花數") 鍵盤輸入年,驗證輸入的年是否是閏年,如果是輸出閏年的2月份有29天 否則輸出平年的2月份有28天 閏年概念: 閏年分為兩類 普通閏年:是4的倍數但是不是100的倍數 世紀閏年:是400的倍數 year = int(input("請輸入年份:")) if year % 4 == 0 and num % 100 != 0 and num % 400 == 0:print("閏年的2月份有29天") else:print("平年的2月份有28天") 定義兩個變量保存一個人的身高和體重,編程實現判斷這個人的身材是否正常!公式: 體重(kg)/身高(m)的平方值 在18.5 ~ 24.9之間屬于正常,小于18.5是偏瘦,大于24.9是偏胖。 height = float(input("請輸入您的身高(m):")) weight = float(input("請輸入您的體重(kg):")) if 18.5 <= weight / (height) ** 2 <= 24.5:print("正常") else:print("不正常") 錄入一個百分制的學生成績,根據成績進行分級 90-100 A 80-90 B 70-80 C 60-70 D 0-60 E score = float(input("請輸入一個百分制成績:")) if 90 <= score <= 100:print("A") elif 80 <= score < 90:print("B") elif 70 <= score < 80:print("C") elif 60 <= score < 70:print("D") else:print("E") 三角形校驗器:錄入三角形的三個邊長,判斷三個數據能否構成三角形 構成三角形的條件是任意兩邊之和大于第三邊 a = int(input("請輸入a的值:")) b = int(input("請輸入b的值:")) c = int(input("請輸入c的值:")) if (a + b > c) and (a + c > b) and (c + b > a):print("可以構成三角形") else:print("不能構成三角形") 一根繩子長1000米, 每天截取剩余繩子的四分之一,問多少天后繩子長度還剩下不足3米 long = 1000 count = 0 while long >= 3:long = long - long / 4count += 1 print(count) 一張紙的厚度大約是0.08mm,對折多少次之后能達到珠穆朗瑪峰的高度8848.13米 注意單位換算 1m = 1000mm height = 0.00008 count = 0 while height < 8848.13:height = height * 2count += 1 print(f"{height}米,{count}天") 公園里有一只猴子和一堆桃子,猴子每天吃掉桃子總數的一半,把剩下一半中扔掉一個壞的。到第七天的時候,猴子睜開眼發現只剩下一個桃子。問公園里剛開始有多少個桃子? peach = 1 day = 0 while day < 7:peach = (peach + 1) * 2day += 1 print(peach) 求1到100以內能被7或者3整除,但是不能同時被3和7整除的數 for i in range(1, 101):if (i % 3 == 0 or i % 7 == 0) and i % 21 != 0:print(i) 統計101~200中素數的個數,并且輸出所有的素數。(素數又叫質數,就是只能被1和它本身整除的數) nums = [] sum = 0 for i in range(101, 201):count = 0for j in range(1, i):if i % j == 0:count += 1if count == 1:nums.append(i)sum += 1 print(nums,sum,"個") 求斐波那契數列中第n個數的值,n是正整數。n值由控制臺輸入 > **說明**:斐波那契數列是這樣的一個數列:1、1、2、3、5、8、13、21、34、.... ,第一個數和第二個數是1,從第三個數開始每個元素是前兩個元素相加的和。 a = int(input('請輸入想求斐波那契數列第幾位的值:')) b = 0 c = 1 d = 1 for i in range(2, a + 1):d = b + cb = cc = d print(f'第{a}位數的值是ze8trgl8bvbq') 百馬百擔"問題:一匹大馬能馱3擔貨,一匹中馬能馱2擔貨,兩匹小馬能馱1擔貨,如果用一百匹馬馱一百擔貨,問有大、中、小馬各幾匹? #所有的貨物全部用大馬去運輸:34 #所有貨物全部用中馬去運輸:50 #所有的貨物全部用小馬運輸:200 for i in range(34): #表示大馬for j in range(50): #表示中馬k = 100 - i - j #表示小馬if i*3 + j*2 + k*0.5 == 100: #表示貨物的數量剛好是100擔print(f"大馬{i},中馬{j},小馬{k}") 輸出20~80之間能被3整除的整數, 每行5個 count = 0 for i in range(20, 81):if i % 3 == 0:print(i, end=' ')count += 1if count == 5:print()count = 0 聲明一個列表,在列表中保存6個學生的信息( list = [{'name': '張三', 'age': 18, 'score': 50, 'tel': 18866669988, 'sex': '男'},{'name': '李四', 'age': 16, 'score': 88, 'tel': 18866669932, 'sex': '女'},{'name': '張三', 'age': 17, 'score': 48, 'tel': 18866669998, 'sex': '不明'},{'name': '陳一軍', 'age': 61, 'score': 59, 'tel': 18866669912, 'sex': '男'},{'name': '陳二軍', 'age': 49, 'score': 49, 'tel': 18866669949, 'sex': '不明'},{'name': '陳三軍', 'age': 49, 'score': 61, 'tel': 18866669959, 'sex': '女'} ]) (1) 統計不及格學生的個數 (score < 60) (2) 打印不及格學生的名字和對應的成績 (3) 統計未成年學生的個數 (age < 18) (4) 打印手機尾號是8的學生的名字 (5) 打印最高分和對應的學生的名字 提示: 方式一: 排序算法 方式二: sort(key=) list = [{'name': '張三', 'age': 18, 'score': 50, 'tel': 18866669988, 'sex': '男'},{'name': '李四', 'age': 16, 'score': 88, 'tel': 18866669932, 'sex': '女'},{'name': '張三', 'age': 17, 'score': 48, 'tel': 18866669998, 'sex': '不明'},{'name': '陳一軍', 'age': 61, 'score': 59, 'tel': 18866669912, 'sex': '男'},{'name': '陳二軍', 'age': 49, 'score': 49, 'tel': 18866669949, 'sex': '不明'},{'name': '陳三軍', 'age': 49, 'score': 61, 'tel': 18866669959, 'sex': '女'} ] count_score = 0 count_age = 0 tic_score = {} for i in list:#不及格人數及打印其姓名和成績if i['score'] < 60 :count_score += 1print(f"不及格學生姓名和成績{i['name']}:{i['score']}")#未成年人數if i['age'] < 18:count_age += 1#手機尾號是8的if i['tel'] % 10 == 8:print(f'手機尾號為8{i["name"]}')tic_score[i["name"]] = i["score"]print(f"不及格的人數是{count_score}") print(f"未成年的人數是{count_age}")#獲取最高分的姓名和成績 max_score = 0 for stu in list:if stu['score'] > max_score:max_score = stu['score']name = stu['name'] print(f"成績最高的是{name}分數為{max_score}")'''(6) 刪除性別不明的所有學生(選做)''' i = 0 while i < len(list):if list[i]['sex'] == '不明':list.pop(i)i -= 1i += 1 print(list)'''(7) 將列表按學生成績從大到小排序(難,選做)''' ''' # 第一種方式: # ele 表示列表中的每個字典 def pai(ele):return ele['score'] # 將每個字典中的score成績字段返回 list.sort(reverse=True,key=pai) # key=pai 表示將字典中的數據分別傳入pai處理 for stu in list:print(stu) '''# 第二種方式: list.sort(reverse=True,key=lambda stu:stu['score']) # lambda是匿名函數表達式 for stu in list:print(stu) 封裝函數,計算傳入字符串中單個【數字】、【字母】、【空格] 以及 【其他字符】的個數 def jishu(str):shuzi = 0zimu = 0kongge = 0qita = 0for i in str:# print(i)# 判斷i是否是數字if i.isdigit():shuzi += 1elif i.isalpha():zimu += 1elif i == " ":kongge += 1else:qita += 1print(f'數字有:{shuzi}個')print(f'字母有:{zimu}個')print(f'空格有:{kongge}個')print(f'其他字符有:{qita}個') # jishu(str1) 寫一個函數,識別字符串是否符合python語法的變量名1.數字字母下劃線,且不能以數字開頭. 2.不能使用關鍵字import keywordprint(keyword.kwlist) def get_str(str):# 如果字符串不是數字開頭和不是關鍵字if str[0].isdigit() == False and keyword.iskeyword(str) == False:for i in str:# 判斷字符串中的每個字符是否是數字 字母 和下劃線,若是,符合要求if i.isdigit() or i.isalpha() or i == "_":passelse:# 否則證明 字符串的組成部分不是數字 字母 下劃線該字符串命名不合法print('不符合變量名命名規則')else:print('不符合變量名命名規則,不能數字開頭或者是關鍵字')# get_str("1hello") # get_str('hello1') # get_str('for') 寫一個函數計算兩個數的最小公倍數; 并返回結果打印出來 def func(a,b):for i in range(max(a,b),a*b+1):if i % a == 0 and i % b == 0:return i # print('8和12的最小公倍數是:',func(8,12)) # print('2和4的最小公倍數是:',func(2,4)) 年月日分別為自定義函數的參數,判斷某一個日期是否為合法的日期; (選做) 如: 2020年12月33日不是合法的日期 2021年2月29日是不合法的日期 def fn3(year, month, day):pass def get_runnian(year):return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)def fn3(year, month, day):# 判斷月份是否合法:if month < 1 or month > 12:return False# 判斷日期是否合法if month in [1,3,5,7,8,10,12]:return 1 <= day <= 31if month == 2:if get_runnian(year):return 1 <= day <= 29return 1 <= day <= 28return 1 <= day <= 30print(fn3(2001,4,29)) 使用遞歸實現:計算某個數的階乘 def fn1(n):if n == 1:return 1return n * fn1(n-1) print(fn1(10)) 封裝函數,傳入m,得到 第m個 斐波那契數#1 1 2 3 5 8 13 21 臨界值: 第一個數和第二個數的值為1 公式:第m個數 = 第m-1個數 + 第m-2個數 def fn2(m):if m < 3:return 1return fn2(m-1) + fn2(m-2) print(fn2(3)) 封裝函數,傳入n,得到 前n個 斐波那契數1 1 2 3 5 8 13 21 def fn2(m):if m < 3:return 1return fn2(m-1) + fn2(m-2)def fn3(n):for i in range(1, n+1):print(fn2(i)) fn3(5)?寫一個裝飾器來統計函數運行的時間 import time time.time() 獲取當前的時間戳
import time def operation_time(fn):def inner(*args):# 獲取fn函數執行前的時間戳start = time.time()fn(*args)# 獲取fn函數執行完后的時間戳end = time.time()print('運行時間:',end - start)return inner@operation_time def get_sum():sum = 0for i in range(100000000):sum *= i get_sum() 兔子繁殖問題。設有一對新生的兔子,從第4個月開始他們每個月月初都生一對新兔子,新生的兔子從第4個月開始又每個月月初生一對兔子。按此規律,并假定兔子沒有死亡,20個月末共有多少對兔子?1個月大 2個月大 3個月大 4個月大(包含大于4個月的) 兔子的總對數 第一個月 1 0 0 0 1 第二個月 0 1 0 0 1 第三個月 0 0 1 0 1 第四個月 1 0 0 1 2 第五個月 1 1 0 1 3 第六個月 1 1 1 1 4 第七個月 2 1 1 2 6 第八個月 3 2 1 3 9 第九個月 4 3 2 4 13 第十個月 6 4 3 6 19 臨界值: f(1)=f(2)=f(3)=1 公式: f(n) = f(n-1) + f(n-3) def f(n):if n < 4:return 1return f(n-1)+f(n-3) print(f(20)) 定義函數實現冒泡排序功能,參數是要排序的列表,返回值是排序后的列表. 如list1=[1,3,5,6,7,9,0,2,4,7,9], 排序后的結果:[0, 1, 2, 3, 4, 5, 6, 7, 7, 9, 9] list1=[1,3,5,6,7,9,0,2,4,7,9] def fn(list1):for i in range(len(list1) - 1):for j in range(len(list1) - 1 - i):if list1[j] > list1[j+1]:list1[j],list1[j+1] = list1[j+1],list1[j]return list1 print(fn(list1)) 定義一個函數求偶數的累加和,參數是范圍,如參數是n,則表示求1-n的范圍內偶數的累加和,結果以返回值形式返出 def sum(n):sum1 = 0for i in range(2,n+1,2):sum1 += ireturn sum1 print(sum(4)) 定義一個函數: 實現產生驗證碼的功能,參數是產生驗證碼的個數,驗證碼要求是大小寫字母數字的隨機組合. import random def yanzheng(n):str1 = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'list1 = []for i in range(n):list1.append(random.choice(str1))str2 = ''.join(list1)return str2 定義一個函數: 能產生1-20之間指定個數的隨機數(隨機數要求保存到列表中),參數是隨機數的個數. import random def rand_num(n):list1 = []for i in range(n):list1.append(random.choice(range(1,21)))return list1 已知字典dict1 = {‘a’:’001’,’b’:’002’,’c’:’003’},請寫代碼完成key與value的交換 dict1 = {'a':'001','b':'002','c':'003'} dict2 = {} values1 = dict1.values() keys1 = dict1.keys() for i in values1:for j in keys1:dict2[i] = j print(dict2) 給定一個列表,其中該列表中的元素均是字符串,請寫代碼刪除里面的空字符串元素. list1 = ['12',' ','31','','123','','21314'] n = 0 while n < len(list1):if list1[n] == '':list1.pop(n)n -= 1n += 1 print(list1) # 題目:創建函數, 從文件guishudi.txt中獲取數據,輸入完整手機號11位,匹配前7位,輸出對應的地址和卡類型 # # 60268|1340475|0431|吉林省長春市|吉林移動大眾卡 # 手機號前7位 :1340475 def fun(phone):with open('guishudi.txt','r',encoding='utf-8') as fl:fl_list = fl.readlines()for i in fl_list:list1 = i.split('|')if list1[1] == str(phone)[:7]:print(list1[3],list1[4])breakfun(13404751231) #從文件kaifanglist.txt中獲取數據 # 題目: 開房查詢 # 創建函數,傳入一個名字,查找到這哥們所有的開房記錄, # 然后寫入到以這哥們名字為名的txt文件中 如:張三.txt # # 例如: # 胡美娜,340402198402051229,F,19840208,-,-,13601320094,-,-,haoxinqing@163.com,0 # 徐旸,430103197302241519,M,19730222,-,-,13925066216,-,-,xutommy@yahoo.com.cn, # 戚長鶴,362101193112180010,M,19811218,604,-,13870774166,-,-,qchaini@163.com, # 陳偉,320107197288164212,M,19720816,-,-,13818333169,-,-,roger@126.com,0 # 姜艷彬,230521192112022713,M,19811202,-,-,13695189595,-,-,jyb@163.com, def fn(name):with open('kaifanglist.txt', 'r', encoding='utf-8') as fl:fl_list = fl.readlines()for i in fl_list:list1 = i.split(',')if list1[0] == name:with open(f'{name}.txt','a',encoding='utf-8') as fl1:fl1.write(i)fn('劉斐') #從文件youbian.txt中獲取數據 # 題目: 郵編查詢 # 創建函數, 傳入一個郵編,得到歸屬地 #[110000,"北京市"], # [110100,"北京市市轄區"], # [110101,"北京市東城區"], # [110102,"北京市西城區"], # [110103,"北京市崇文區"], # [110104,"北京市宣武區"], # [110105,"北京市朝陽區"], # [110106,"北京市豐臺區"], # [110107,"北京市石景山區"], def fn(num):with open('youbian.txt', 'r', encoding='utf-8') as fl:fl_str = fl.read()fl_str1 = ''fl_list1 = []for i in fl_str:if i == '[' or i == ']' or i == '"':passelse:fl_str1 += i# print(fl_str1)fl_list = fl_str1.split(',\n')for j in fl_list:list1 = j.split(',')fl_list1.append(list1)for i in fl_list1:if i[0] == str(num):print(i[1]) fn(110100) # 遞歸刪除文件夾(可能包含子文件或子文件夾) # 【溫馨提示:創建一個文件夾,不要直接操作已有的文件夾】# 提示:要先將文件夾中的所有子文件刪除再刪除本文件夾 # remove(): 刪除文件 # rmdir(): 刪除空目錄 import ospath = "/Users/XXX/Desktop/t4測試"def del_dir(path):# 判斷文件是否存在if not os.path.exists(path):print("路徑不存在")returnfile_list = os.listdir(path) # 查看指定目錄下面所有的文件夾和文件for file in file_list:# 獲取文件或者文件夾的絕對路徑file_path = os.path.join(path,file) # 將文件名根路徑拼接# 判斷file_path是文件還是文件夾if os.path.isfile(file_path):os.remove(file_path)# 文件夾else:del_dir(file_path)# 最后刪除文件夾os.rmdir(path) del_dir(path) 拷貝文件【考慮大文件拷貝,每次讀取1024字節拷貝】 import os import math#copy二進制文件 def copy_file(file_name):#查看文件大小file_size = os.path.getsize(file_name)for i in range(math.ceil(file_size/1024)):with open('shipin.mp4','rb') as rf:#將讀取指針移動到上次讀取的位置rf.seek(1024*i,0)str = rf.read(1024)with open('shipin1.mp4','ab') as rf1:rf1.write(str)copy_file('shipin.mp4')#copy普通文件 with open('kaifanglist.txt','r',encoding='utf-8') as fp:with open('kaifanglistcopy.txt','a',encoding='utf-8') as fp1:while True:file = fp.read(1024)if not file:breakfp1.write(file)fp1.flush() 定義一個Time類,對象屬性包括:時、分、秒;通過__init__初始化屬性。對象方法有:add_hour(self,num) 把小時加numadd_minute(self,num) 把分鐘加numadd_second(self,num) 把秒數加num定義show方法,打印格式化的時間字符串:"04:16:09" class Time():def __init__(self,h,m,s):self.h = hself.m = mself.s = sdef add_hour(self,num):if self.h + num >= 24:self.h = (self.h + num) % 24else:self.h += numreturn self.hdef add_minute(self,num):if self.m + num >= 60:count = (self.h + num) // 60self.m = (self.h + num) % 60self.add_hour(count)else:self.m += numreturn self.mdef add_second(self,num):if self.s + num >= 60:count1 = (self.s + num) // 60self.s = (self.s + num) % 60self.add_minute(count1)else:self.s += numreturn self.sdef show(self):if self.s < 10:s = '0'+str(self.s)else:s = str(self.s)if self.m < 10:m = '0'+str(self.m)else:m = str(self.m)if self.h < 10:h = '0'+str(self.h)else:h = str(self.h)print(f"{h}:{m}:{s}") 類的設計員工類Employee:屬性: 姓名name, 年齡age, 性別sex, 編號no, 薪資salary 公司類Company屬性: 名稱name, 所有員工employee_list[有多個員工]方法: sort 對所有員工按照薪資降序排序 class Employee:def __init__(self,name,age,sex,no,salary):self.name = nameself.age = ageself.sex = sexself.no = noself.salary = salaryclass Company:def __init__(self,name,employee_list):self.name = nameself.employee_list = employee_listdef sort(self):self.employee_list.sort(reverse = True,key=lambda emp:emp[4])print(self.employee_list)emp1 = ('zhangsan',18,'男',123,12000) emp2 = ('lisi',19,'女',124,10000)# com = Company('大大大公司',[emp1,emp2]) # com.sort()題目:有幾個生產車間生產,幾個消費者購買,當生產達到一定數量時,停止生產。?
import threading import timecondtion = threading.Condition() sheep = ['1件產品','1件產品','1件產品','1件產品','1件產品'] class Producer(threading.Thread):def __init__(self, name):super().__init__(name=name)passdef run(self):global condtion, sheepwhile True:time.sleep(0.1)condtion.acquire()if len(sheep) < 10:print(self.name + "生產了1件產品")sheep.append('1件產品')condtion.notifyAll()passelse:print("倉庫滿了,停止生產!")condtion.wait()passcondtion.release()passpass class Customer(threading.Thread):def __init__(self, name):super().__init__(name=name)passdef run(self):global condtion, sheepwhile True:time.sleep(0.1)condtion.acquire()if len(sheep) > 0:meat = sheep.pop()print(self.name + "購買了" + meat + "還剩多少" + str(len(sheep)) + "件")condtion.notifyAll()passelse:print("買光了,等待")condtion.wait()passcondtion.release()passpass if __name__ == "__main__":p1 = Producer("1號生產車間")p2 = Producer("2號生產車間")p3 = Producer("3號生產車間")p4 = Producer("4號生產車間")p5 = Producer("5號生產車間")p6 = Producer("6號生產車間")p1.start()p2.start()p4.start()p5.start()p6.start()c1 = Customer('小王')c2 = Customer('小李')c3 = Customer('小賈')c4 = Customer('小沈')c5 = Customer('小劉')c1.start()c2.start()c3.start()c4.start()c5.start()總結
以上是生活随笔為你收集整理的Python基础编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go语言编程从入门到精通,流程控制之sw
- 下一篇: crosswalk源码 的编译过程