Python3練習題

上一節中全面講解了基礎知識,為了鞏固知識點,當然最好的方法就是練習了。

練習 1:變量類型轉換與算術運算

需求:接收用戶輸入的兩個數字(可能是整數或字符串格式),轉換為浮點數后計算 “冪運算、整除、取余” 結果,并打印類型信息。

def main():num1_str = input("first number:")num2_str = input("second number:")fnum1 = float(num1_str)fnum2 = float(num2_str)pow_result = fnum1 ** fnum2div_result = fnum1 // fnum2mod_result = fnum1 % fnum2# 打印結果與類型print(f"\n{fnum1}{fnum2} 次冪:{pow_result},類型:{type(pow_result)}")print(f"{fnum1} 整除 {fnum2}{div_result},類型:{type(div_result)}")print(f"{fnum1} 取余 {fnum2}{mod_result},類型:{type(mod_result)}")if __name__ == "__main__":main()

結果:
在這里插入圖片描述

練習 2:多條件判斷與循環

需求:遍歷 1~20 的整數,按以下規則分類打印:
能被 3 和 5 同時整除:打印 “[數字] 是 3 和 5 的倍數”
能被 3 整除:打印 “[數字] 是 3 的倍數”
能被 5 整除:打印 “[數字] 是 5 的倍數”
其余數字:打印 “[數字] 不是目標倍數”

def main():for i in range(1,21):if i % 3 == 0 and i %5 == 0:print(f"[{i}] 是 3 和 5 的倍數")elif i %3 == 0:print(f"[{i}] 是 3 的倍數")elif i % 5 == 0:print(f"[{i}] 是 5 的倍數")else:print(f"[{i}] 不是目標倍數")if __name__ == "__main__":main()

結果:
在這里插入圖片描述

練習 3:可變參數與多返回值

需求:定義一個函數,接收 “固定參數(商品基礎價)+ 可變位置參數(折扣比例列表)+ 可變關鍵字參數(額外費用,如運費、服務費)”,計算并返回 “最低折扣價、最高折扣價、最終總價(基礎價 × 折扣 + 額外費用總和)”。

def calculate_price(base_price,*discount,**extra_fees):# 計算最低/最高折扣價min_discount_price = base_price * min(discount)max_discount_price = base_price * max(discount)# 計算額外費用總和(關鍵字參數的value求和)total_extra = sum(extra_fees.values())# 計算最終總價(取最低折扣價+額外費用)final_price = min_discount_price + total_extra# 多返回值(實際返回元組)return min_discount_price, max_discount_price, final_priceif __name__ == "__main__":min_p,max_p,final_p = calculate_price(100,0.8,0.9,ship = 10,servce=5)# 打印結果print(f"基礎價:100 元")print(f"最低折扣價:{min_p:.2f} 元")print(f"最高折扣價:{max_p:.2f} 元")print(f"最終總價(最低折扣+額外費用):{final_p:.2f} 元")

結果:
在這里插入圖片描述

練習 4:函數裝飾器

需求:定義一個 “計時裝飾器”,用于統計任意函數的執行時間,并打印 “函數名、參數、返回值、執行耗時”。

import timeimport time# 定義計時裝飾器
def time_decorator(func):def wrapper(*args, **kwargs):# 執行前:記錄開始時間start_time = time.time()# 調用原函數,獲取返回值result = func(*args, **kwargs)# 執行后:計算耗時,打印信息end_time = time.time()cost_time = (end_time - start_time) * 1000  # 轉換為毫秒print(f"\n=== 函數執行報告 ===")print(f"函數名:{func.__name__}")print(f"位置參數:{args}")print(f"關鍵字參數:{kwargs}")print(f"返回值:{result}")print(f"執行耗時:{cost_time:.2f} 毫秒")return resultreturn wrapper# 使用裝飾器裝飾目標函數(計算1到n的和)
@time_decorator
def sum_to_n(n):total = 0for i in range(1, n+1):total += ireturn totalif __name__ == "__main__":sum_result = sum_to_n(100000)print(f"\n1到100000的和:{sum_result}")sum_result = sum_to_n(1000000)print(f"\n1到100000的和:{sum_result}")

結果:
在這里插入圖片描述

練習 5:列表與字典操作

需求:

用列表存儲 5 個學生的姓名和成績(格式:["張三:90", "李四:85", ...])
將列表轉換為字典(鍵:姓名,值:成績)
篩選出成績≥85 的學生,按成績降序排序并打印
def main():students = ["張三:88","李四:66","王五:99","趙六:66","二蛋:85"]#2.轉換為字典score_dict = {}for text in students:key,value = text.split(":")score_dict[key] = int(value)high_score_student = [(name,score) for name,score in score_dict.items() if score >= 85]print(high_score_student)sorted_student = sorted(high_score_student,key = lambda x :x[1],reverse = True)print(sorted_student)if __name__ == "__main__":main()

結果:
在這里插入圖片描述

練習 6:集合運算

需求:已知兩個集合(A:數學滿分學生,B:語文滿分學生),計算 “兩科都滿分(交集)、至少一科滿分(并集)、僅數學滿分(差集)” 的學生名單。

def main():# 定義兩個集合math_full = {"張三", "李四", "趙六"}  # 數學滿分chinese_full = {"李四", "王五", "孫七"}  # 語文滿分# 集合運算both_full = math_full & chinese_full  # 交集:兩科都滿分any_full = math_full | chinese_full   # 并集:至少一科滿分only_math = math_full - chinese_full  # 差集:僅數學滿分# 打印結果print("數學滿分學生:", math_full)print("語文滿分學生:", chinese_full)print("兩科都滿分學生:", both_full)print("至少一科滿分學生:", any_full)print("僅數學滿分學生:", only_math)if __name__ == "__main__":main()

結果:
在這里插入圖片描述

練習 7:字符串格式化與常用方法

需求:接收用戶輸入的 “姓名、年齡、身高(cm)”,按以下格式輸出個人信息,并統計 “姓名長度、身高是否≥170cm”:

def main():# 接收用戶輸入name = input("請輸入姓名:")age_str = input("請輸入年齡:")height_str = input("請輸入身高(cm):")# 數據處理:年齡轉整數,身高轉整數age = int(age_str)height = int(height_str)# 字符串格式化(f-string)info = f"""【個人信息卡】
姓名:{name}(長度:{len(name)}字)
年齡:{age}歲(明年:{age+1}歲)
身高:{height}cm(是否達標:{'是' if height >= 170 else '否'})"""# 打印結果print(info)if __name__ == "__main__":main()

結果:
在這里插入圖片描述

練習 8:文件讀寫與內容統計

需求:
向 “student.txt” 文件寫入 3 行學生信息(格式:姓名,年齡,成績)
讀取文件內容,統計 “平均成績、最高成績及對應姓名”
將統計結果追加到文件末尾

def file_read_write_demo():# 1. 寫入文件(覆蓋模式,若文件不存在則創建)with open("student.txt", "w", encoding="utf-8") as f:f.write("張三,20,90\n")f.write("李四,19,85\n")f.write("趙六,21,95\n")print("已寫入學生信息到 student.txt")# 2. 讀取文件并統計names = []scores = []with open("student.txt", "r", encoding="utf-8") as f:for line in f:line = line.strip()  # 去除換行符和空格if not line:continue  # 跳過空行name, age_str, score_str = line.split(",")names.append(name)scores.append(int(score_str))# 計算統計結果avg_score = sum(scores) / len(scores)max_score = max(scores)max_score_name = names[scores.index(max_score)]# 3. 追加統計結果到文件with open("student.txt", "a", encoding="utf-8") as f:f.write("\n=== 成績統計結果 ===\n")f.write(f"平均成績:{avg_score:.1f}\n")f.write(f"最高成績:{max_score}{max_score_name})\n")print("已追加統計結果到 student.txt")# 驗證:讀取文件全部內容并打印with open("student.txt", "r", encoding="utf-8") as f:content = f.read()print("\n文件全部內容:")print(content)# 調用函數
file_read_write_demo()

結果:
在這里插入圖片描述

練習 9:類的繼承與多態

需求:
定義父類 “Animal”,包含 “name” 屬性和 “make_sound” 方法(純虛函數風格)
定義子類 “Dog”“Cat”“Bird”,重寫 “make_sound” 方法(分別輸出 “汪汪”“喵喵”“嘰嘰”)
定義函數 “animal_sound_show”,接收任意 Animal 對象,調用其 “make_sound” 方法(多態)

class Animal:def __init__(self, name):self.name = name  # 公開屬性def make_sound(self):# 父類方法:子類需重寫raise NotImplementedError("子類必須重寫 make_sound 方法")# 子類1:Dog
class Dog(Animal):def make_sound(self):print(f"{self.name} 叫:汪汪汪!")# 子類2:Cat
class Cat(Animal):def make_sound(self):print(f"{self.name} 叫:喵喵喵!")# 子類3:Bird
class Bird(Animal):def make_sound(self):print(f"{self.name} 叫:嘰嘰嘰!")# 多態函數:接收任意Animal子類對象
def animal_sound_show(animal):if isinstance(animal, Animal):  # 檢查是否為Animal類型animal.make_sound()else:print("不是有效的Animal對象!")# 測試:創建對象并調用多態函數
dog = Dog("大黃")
cat = Cat("小白")
bird = Bird("啾啾")animal_sound_show(dog)
animal_sound_show(cat)
animal_sound_show(bird)
# 測試無效對象
animal_sound_show("不是動物")

在這里插入圖片描述

練習 10:特性(property)與訪問控制

需求:定義 “Person” 類,用 “特性” 控制 “age” 屬性:
年齡必須是 0~150 的整數,否則報錯
提供 “get_age”(獲取年齡)和 “set_age”(設置年齡)的邏輯,外部通過 “p.age” 直接訪問

class Person:def __init__(self, name, age):self.name = name# 初始化時調用setter,確保年齡合法self.age = age# 特性:getter(獲取年齡)@propertydef age(self):return self._age  # _age 是約定的私有變量# 特性:setter(設置年齡,帶驗證)@age.setterdef age(self, value):# 驗證:必須是整數,且在0~150之間if not isinstance(value, int):raise TypeError("年齡必須是整數!")if value < 0 or value > 150:raise ValueError("年齡必須在 0~150 之間!")self._age = value# 測試:正常情況
p1 = Person("張三", 25)
print(f"{p1.name} 的年齡:{p1.age}")# 測試:修改年齡(合法)
p1.age = 30
print(f"{p1.name} 修改后的年齡:{p1.age}")# 測試:非法情況(觸發異常,可注釋后運行)
# p2 = Person("李四", "20")  # 類型錯誤
# p3 = Person("王五", 200)   # 值錯誤

結果:
在這里插入圖片描述

練習 11:自定義模塊調用

需求:
創建自定義模塊 “math_tools.py”,包含 “add(加法)、multiply(乘法)、is_prime(判斷質數)” 三個函數
在主腳本中導入該模塊,調用函數并測試

步驟 1:創建模塊文件 “math_tools.py”

# math_tools.py(自定義模塊)
def add(a, b):"""加法運算"""return a + bdef multiply(a, b):"""乘法運算"""return a * bdef is_prime(n):"""判斷n是否為質數(質數:大于1的整數,僅能被1和自身整除)"""if n <= 1:return Falseif n == 2:return Trueif n % 2 == 0:return False# 檢查3到sqrt(n)的奇數for i in range(3, int(n**0.5) + 1, 2):if n % i == 0:return Falsereturn True

步驟 2:主腳本調用模塊

# 主腳本 main.py
# 導入自定義模塊(三種方式任選)
import math_tools as mt
from math_tools import is_prime# 測試加法
print("3 + 5 =", mt.add(3, 5))# 測試乘法
print("4 × 6 =", mt.multiply(4, 6))# 測試質數判斷
test_nums = [7, 12, 17, 20]
for num in test_nums:print(f"{num} 是質數嗎?", is_prime(num))

結果:
在這里插入圖片描述

練習 12:多線程與鎖同步

需求:創建 3 個線程,共享 “計數器” 變量,每個線程對計數器累加 1000 次,用鎖確保計數器最終結果正確(避免競態條件)。

import threading
import time
num =0
lock = threading.Lock()def increment_counter(thread_name):global numfor _ in range(1000):with lock:num+=1time.sleep(0.001)print(f"線程 {thread_name} 執行完畢,當前計數器:{num}")thread1 = threading.Thread(target=increment_counter,args=("thread1",))
thread2 = threading.Thread(target=increment_counter,args=("thread2",))
thread3 = threading.Thread(target=increment_counter,args=("thread3",))thread1.start()
thread2.start()
thread3.start()# 等待所有線程結束
thread1.join()
thread2.join()
thread3.join()print(f"\n所有線程執行完畢,最終計數器:{num}")

結果:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97931.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Motioncam Color S + 藍激光:3D 視覺革新,重塑工業與科研應用新格局

在工業自動化、科研探索及智能檢測等前沿領域&#xff0c;對物體進行高精度、高速度且穩定可靠的三維成像&#xff0c;始終是推動技術進步與效率提升的關鍵訴求。過往的 3D 成像設備&#xff0c;常因精度欠佳、對復雜材質適應性差、難以應對動態場景等局限&#xff0c;在實際應…

用html5寫一個第一視角的摩托車開車游戲,畫上摩托車把手,把手兩側放上可操控方向的按鈕,再加上,前進和減速的按鈕

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>第一視角摩托車</title><style>html…

SpringMVC 系列博客(一):基礎概念與注解開發入門

目錄 一、引言 二、MVC 模式&#xff1a;SpringMVC 的設計基石 2.1 MVC 三大組件 2.2 主流 MVC 框架對比 2.3 MVC 模式的核心優勢 三、SpringMVC 框架&#xff1a;是什么&#xff1f;為什么學&#xff1f; 3.1 什么是 SpringMVC&#xff1f; 3.2 為什么要學 SpringMVC&a…

Java 字符串操作教程:三個任務完整復現與解析

這次是完成一些小任務來試試身手&#xff0c;免得生疏&#xff1a; 編寫程序&#xff0c;使用charAt和length方法&#xff0c;將字符串"HelloWorld"拆分為"Hello"和"World"兩個子串并輸出。 設計一個方法&#xff0c;利用indexOf和lastlndexOf&a…

向量技術研究報告:從數學基礎到AI革命的支柱

1. 向量的數學本質與歷史演變 1.1 核心定義與數學表示 向量是同時具有大小&#xff08;Magnitude&#xff09;和方向&#xff08;Direction&#xff09;的量&#xff0c;在數學上被嚴格定義為向量空間中的元素。與僅有大小的標量&#xff08;Scalar&#xff09;不同&#xff0c…

Qt QHorizontalStackedBarSeries詳解

1、概述QHorizontalStackedBarSeries 是 Qt Charts 模塊中的一個類&#xff0c;用于創建水平堆疊條形圖。它繼承自 QAbstractBarSeries 類&#xff0c;允許將多個數據系列堆疊在一起顯示&#xff0c;每個條形由多個部分組成&#xff0c;這些部分共同構成一個完整的條形&#xf…

《股票智能查詢與投資決策輔助應用項目方案》

前引&#xff1a;本股票智能查詢與投資決策輔助應用通過整合多源金融數據&#xff0c;運用量化分析 機器學習技術&#xff0c;為普通投資者提供全方位股票信息服務和個性化投資建議。系統不僅解決了傳統工具 “數據分散、分析復雜” 的問題&#xff0c;更通過人性化交互和直觀…

從零開始構建Kubernetes Operator:一個完整的深度學習訓練任務管理方案

從零開始構建Kubernetes Operator&#xff1a;一個完整的深度學習訓練任務管理方案一、引言二、為什么需要Operator&#xff1f;1. Controller vs Operator&#xff1a;本質區別2. 有狀態服務 vs 無狀態服務的挑戰三、項目架構設計3.1整體架構圖3.2核心組件4.核心實現解析1. CR…

第二十二篇|新世界語學院教育數據深度解析:學制函數、能力矩陣與升學圖譜

第二十二篇&#xff5c;新世界語學院教育數據深度解析&#xff1a;學制函數、能力矩陣與升學圖譜 系列主題&#xff1a;500所日本語言學校結構數據工程 關鍵詞&#xff1a;新世界語學院、東京新宿、學制函數建模、JLPT能力矩陣、升學網絡、教育數據工程 一、合規與法人建模&…

Java開發工具選擇指南:Eclipse、NetBeans與IntelliJ IDEA對比

在Java開發的世界里&#xff0c;選擇合適的開發工具就如同挑選一把稱手的禪杖&#xff0c;能助你在代碼修行的路上更加得心應手。本文將為Java開發者提供一份實用的IDE選擇指南&#xff0c;從功能、適用人群、性能等方面深入解析幾款主流的Java開發工具&#xff0c;幫助你找到最…

iOS App 內存泄漏與性能調優實戰 如何排查內存問題、優化CPU與GPU性能、降低耗電并提升流暢度(uni-app iOS開發優化指南)

在 iOS 應用開發中&#xff0c;內存泄漏 是最常見且最難排查的性能問題之一。 它會導致應用 運行越來越卡、占用內存過高、頻繁崩潰&#xff0c;甚至嚴重消耗電池。 尤其在 uni-app 跨平臺開發 中&#xff0c;JS 層和原生層的混合調用更容易隱藏內存問題&#xff1a; 對象未釋放…

從源代碼開始構建、部署和管理應用程序

1.創建項目目錄并準備應用程序的代碼及其依賴1.創建項目目錄&#xff0c;并將當前目錄切換到該目錄[roothost1 ~]# mkdir python-web && cd python-web2.創建 app.py 文件并添加以下代碼[roothost1 python-web]# vi app.py [roothost1 python-web]# cat app.py import …

Flutter-[2]第一個應用

摘要 根據官方文檔搭配好環境&#xff0c;使用vscode創建完應用后&#xff0c;會遇到以下問題 設備無法選擇打開了lib\main.dart右上角也沒有運行按鈕 環境 Windows11Flutter 3.35.4 必要設置 1. 查看是否開啟Windows桌面應用開發flutter config --list輸出如下: All Settings:…

QListWidget選擇阻止問題解決方案

QListWidget選擇阻止問題解決方案QListWidget選擇阻止問題解決方案問題背景QListWidget工作機制詳解1. 事件處理流程2. 關鍵機制說明2.1 鼠標事件與信號的分離2.2 信號阻塞的局限性2.3 斷開連接方法的問題問題的根本原因1. 異步事件處理2. 多層狀態管理3. 事件優先級解決方案演…

TCL華星計劃投建第8.6代印刷OLED產線

近日&#xff0c;TCL科技集團股份有限公司&#xff08;000100.SZ&#xff09;發布公告&#xff0c;公司、旗下子公司TCL華星與廣州市人民政府、廣州經濟技術開發區管理委員會共同簽署項目合作協議&#xff0c;擬共同出資于廣州市建設一條月加工2290mm2620mm玻璃基板能力約2.25萬…

MATLAB 時間序列小波周期分析

1. 文件結構 WaveletPeriod/ ├── main_wavelet_period.m % 一鍵運行 ├── wavelet_power_spectrum.m % 小波功率譜 顯著性 ├── period_peak_detect.m % 自動周期峰值 ├── plot_wavelet_results.m % 時頻圖 周期圖 └── example/└── temp.csv …

如何精準配置儲

當電費賬單變身利潤引擎&#xff0c;您的企業是否做好了準備&#xff1f;鷓鴣云儲能仿真軟件&#xff0c;不止于仿真——我們以智能算法為核心&#xff0c;為企業定制“高收益、高適配、可持續”的儲能配置方案&#xff0c;將用電數據轉化為新一輪增長動能。智慧大腦&#xff1…

Uniapp崩潰監控體系構建:內存泄漏三維定位法(堆棧/資源/線程)

在Uniapp開發中&#xff0c;內存泄漏是導致應用崩潰的核心隱患。通過堆棧分析、資源追蹤和線程監控三維定位法&#xff0c;可系統化定位泄漏源。以下是完整實施方案&#xff1a;一、堆棧維度&#xff1a;泄漏對象溯源內存快照比對使用Chrome DevTools定期獲取內存快照&#xff…

NLP中Subword算法:WordPiece、BPE、BBPE、SentencePiece詳解以及代碼實現

本文將介紹以下內容&#xff1a; 1. Subword與傳統tokenization技術的對比2. WordPiece3. Byte Pair Encoding (BPE)4. Byte-level BPE(BBPE)5. SentencePiece 以及各Subword算法代碼實現 一、Subword與傳統tokenization技術的對比 1. 傳統tokenization技術 傳統tokenizatio…

十一章 無界面壓測

一、采用無界面壓測的原因1.節約系統資源。 2.更快捷&#xff0c;只需要啟動命令即可進行壓測 3.主要是用于性能壓測集成.無界面壓測命令參數&#xff1a; -n 表示無界面壓測 -t 制定你的 jmx 腳本 -l 生成 jtl 測試報告二、注意配置文件設置:輸出為xml jmeter.save.s…