第7周
第一次課 簡單入門, 環境搭建
目標
理解程序和程序設計,理解程序設計語言和python語言的特點
理解交互模式和編輯器(文件)模式
熟悉編程環境,寫出最簡單程序(只有輸出),探索使用機房電腦已經安裝好的環境編寫程序
照寫教學資源中的程序,並能夠改錯通過
能夠獨立安裝和配置python環境(課后在自己的機器上安裝)
學會搜索和利用網絡資源
學會思考、交流和提問
學習資源
https://www.bilibili.com/video/BV1c4411e77t/
-
P1序章07:07
-
P2環境搭建和課程介紹09:15
-
P3用Python設計第一個游戲08:08
-
P4變量和字符串(上)11:43
-
P5變量和字符串(下)09:18
作業
注冊中國大學MOOC賬號,下載中國大學MOOC APP
加入中國大學MOOC課程
https://www.icourse163.org/course/BIT-268001
https://www.icourse163.org/course/ZIIT-1002924007
完成MOOC課程的課后測驗題
完成教材第一章的案例程序,照寫,運行通過,嘗試理解
下載bilibili APP
第二次課 變量、字符串、程序基本結構
目標
理解變量和變量名(復習鞏固)
理解字符串(復習鞏固)
掌握如何向顯示器輸出信息?
掌握如何從鍵盤輸入信息給變量?
初步理解什么是選擇結構?
初步理解什么是循環結構?
初步理解問題描述、求解分析、代碼編寫和運行驗證的過程。
任務問題(復習)
變量的命名規則,舉例正確的變量名,舉例不正確的變量名?
如何交換兩個變量的值?
python有幾種表示字符串的方式,舉例說明?
什么是轉義字符,舉例說明?
什么是原始字符串,舉例說明?
"34"*3的結果是?'12'+'34'的結果是? 12+34的結果是? ‘12’+34的結果是?
任務問題(新知識)
python輸入信息的函數是?
python輸出信息的函數是?
python輸入信息時接收的數據類型是?
python用什么表示代碼之間的層次結構關系?
字符串和數字之間的區別是什么?可以相互轉換嗎?如何轉換?
初學python者在寫代碼的時候經常容易犯哪些錯誤?
什么是選擇結構?
什么是循環結構?
怎樣結束循環?
break的作用是什么?
如何產生一個隨機數?
什么是模塊?
導入模塊用什么關鍵字?
學習資源
https://www.bilibili.com/video/BV1c4411e77t?p=8
-
-
P4變量和字符串(上)11:43
-
P5變量和字符串(下)09:18
-
P6是時候講講代碼了08:21
-
12:11
-
P8改進我們的小游戲(下)08:26
-
作業:
照寫資源中的程序,理解並改錯通過。
照寫教材第一章中的案例代碼,運行通過,嘗試理解。
第三次課 數字類型、布爾類型、常量、運算符和優先級
目標
理解數字類型?python有哪些數字類型?各有什么特點?
5/3的結果是什么? 5/3怎樣才能得到1?
浮點數可以精確表示小數嗎?
為什么不能直接比較兩個浮點數相等(==)?
如何使用科學計數法表示浮點數?
有哪些算術運算符?
有哪些可以作用在數字類型數據上的函數?
什么是求余運算?
什么是bool(布爾)類型?
python表示真假結果的關鍵字是?
python如何判斷一個數字的真假?
python如何判斷一個字符串的真假?
使用布爾類型進行算術運算的時候python是如何處理布爾類型的?
python有哪些邏輯運算符,運算規則是怎用的?
and 和 or 運算符的計算結果一定是布爾類型嗎?
什么是or 和 and運算符的短路邏輯?(較難, 討論)
什么是運算符優先級?
什么是算術、關系、邏輯運算符,他們的優先級有什么規律?
學習資源
https://www.bilibili.com/video/BV1c4411e77t?p=9
-
-
P9數字類型(上)08:41
-
P10數字類型(下)11:23
-
11:39
-
P12短路邏輯和運算符優先級 10:37 (難點)
-
作業:
照寫資源中的程序,理解並改錯通過。
閱讀教材第三章,嘗試理解並照寫運行教材第三章中的簡單案例。
什么是不同進制,如何用不同機制表示整數?
練習以下函數作用在字符串上的效果?
len(x) 字符串長度
str(x) 任意x轉化為對應字符串
hex(x) 整數x變為十六進制小寫字符串
oct(x) 整數x變為八進制小寫字符串
chr(u) unicode編碼返回字符
ord(x) 字符x轉化為unicode編碼 python中字符都是unicode編碼(統一字符編碼)
嘗試理解什么是unicode編碼?
其他字符串對象方法簡單了解,放在后面學習,專門的“字符串處理”知識點。
第8周
實驗課
每次實驗,請將自己的代碼保存為文件並保管好文件,以便自己復習和檢查。
第一次、第二次實驗 輸入、輸出、類型及轉換、基本計算、簡單字符串處理
目標
鍛煉和考查知識點:基本輸入輸出,數據類型,基本問題求解方法,代碼編寫和調試改錯
實驗題目
溫度轉換
溫度分為攝氏溫度和華氏溫度,請利用網絡搜索攝氏溫度和華氏溫度的相關概念以及兩者之間的轉換關系(公式),編程完成如下任務。輸入一個數字代表攝氏溫度,程序輸出對應的華氏溫度。
溫度分為攝氏溫度和華氏溫度,請利用網絡搜索攝氏溫度和華氏溫度的相關概念以及兩者之間的轉換關系(公式),編程完成如下任務。輸入一個數字代表華氏溫度,程序輸出對應的攝氏溫度。
溫度分為攝氏溫度和華氏溫度,請利用網絡搜索攝氏溫度和華氏溫度的相關概念以及兩者之間的轉換關系(公式),編程完成如下任務。先輸入一個數字代表溫度,然后再輸入一個數字代表溫度類型(比如輸入0代表攝氏,1代表華氏,也可以自己定義規則),根據輸入的溫度類型輸出另外一種溫度類型對應的數值。
成績計算
小P同學這學期學了三門課,請你幫助他計算一下他的平均分,輸入為3個數字,代表小P同學3門課程的成績,輸出小P同學的平均分,要求輸出一個整數值。本次遇到了一位特別嚴格的老師,比如小P同學的平均分為59.9分,但是輸出為59分。
小P同學這學期學了三門課,請你幫助他計算一下他的平均分,輸入為3個數字,代表小P同學3門課程的成績,輸出小P同學的平均分,要求輸出一個整數值。本次遇到了一位嚴格的老師,比如小P同學的平均分為59.5分,輸出為60分,比如小P同學的平均分為59.4分,輸出為59分,即采用四舍五入的方式輸出結果。
小P同學這學期學了三門課,請你幫助他計算一下他的平均分,輸入為3個數字,代表小P同學3門課程的成績,輸出小P同學的平均分,要求輸出一個整數值。本次遇到了一位不太嚴格的老師,比如小P同學的平均分為59.1分,但是輸出為60分。
小P同學這學期學了三門課,請你幫助他計算一下他的平均分,輸入為3個數字,代表小P同學3門課程的成績,輸出小P同學的平均分,要求輸出一個整數值。本次遇到了一位特別仁慈的老師,比如小P同學的平均分為45分,但是輸出為60分,即只要達到45分以上就算及格給60,60分及以上不變。
小P同學這學期學了Python課程,Python課程的計分規則為期末成績占比40%,平時成績占比60%, 分別輸入小P同學的期末成績和平時成績,輸出小P同學的Python成績。
小P同學這學期學了Python課程,Python課程的計分規則為期末成績占比40%,平時成績占比60%, 輸入小P同學的期末成績,請你幫助小P同學計算一下他的平時成績至少要達到多少分,總成績才能及格,輸出至少要達到的分數。
字符串相關
說多次,輸入一個字符串,再輸入一個重復次數,輸出該字符串重復多次的結果,比如輸入abc,再輸入3,輸出abcabcabc。
名字長度,輸入你的名字,輸出你的名字的字符數量,比如輸入小P,字符數量為2,輸出2.
字符變大寫,輸入一個英文字符,輸出該字符的大寫字符。
字符變小寫,輸入一個英文字符,輸出該字符的小寫字符。
字符變換,輸入一個英文字符,輸出該字符后面的第3個字符。如果遇到后面3個沒有字符怎么處理?可以自己定義規則。
余數相關
打麻將,A寢室的四個同學今天相聚去打麻將,通過投擲骰子決定誰先抓牌,輸入骰子的點數,點數范圍為1-12,請你根據骰子的點數幫助他們計算一下應該誰先抓牌。比如輸入5,應該輸出1, 輸入8,應該輸出4。
輸入一個數,代表今天是星期幾,再輸入一個數,代表今天后面經過的天數d,輸出經過d天之后是星期幾。
說數字,輸入一個三位數,在三行分別正序輸出每一位數字。比如輸入123,輸出
1
2
3
倒說數字,輸入一個三位數,在三行分別反序輸出每一位數字。
比如輸入123,輸出
3
2
1
比如輸入700,輸出
0
0
7
數學相關
計算函數x的平方在x=1處的導數值並輸出。思考:如果函數很復雜,如何計算導數值?
輸入三角形的三條邊的長度,計算該三角形的周長和面積並輸出。
輸入數據常見的錯誤
錯誤示例
a = input()
b = a/3
這里輸入6,運行會報錯,原因是input函數輸入返回的類型為字符串類型,你輸入的是6,實際上a存的是“6”。 注意520 不等於 "520", “6” / 3, 字符串是不支持除法運算的,所以會出錯。變量都是有類型的,可以用type(a)查看變量的類型。
正確示例
a = input()
a = int(a)
b = a / 3
也可以寫為更簡潔的形式
a = int(input())
b = b / 3
思考:如何輸入並獲得小數?
調用函數常見錯誤
函數可以將輸入的數據進行某種計算返回計算后的數據,比如 a = int(3.6) 的作用是將小數3.6轉換為整數,轉換結果為3, 所以變量a的內容為3。Python中的函數分為內置函數和第三方函數兩種,內置函數是Python自己的函數,可以直接調用,如int、float等函數。第三方函數不是Python自己的函數,是其他模塊提供的函數(你可以把模塊理解成是別人家),所以調用第三方提供的函數需要先導入模塊。請參考以下的代碼
import math
a = math.sqrt(100)
print(a)
如果去掉 import math 會怎樣?
Python功能強大主要就是因為有很多實用的內置函數和第三方模塊(這些模塊提供了大量的有用的函數)
同時輸出多個數據(變量)
>>> a = 4
>>> b = 5
>>> print(a,b)
4 5
將多個變量作為參數傳遞給print函數,各參數之間用逗號間隔,就可以輸出多個變量的值,各輸出變量之間自動加入了一個空格。
控制輸出的換行
print函數每次默認在輸出內容后會輸出一個換行符,如果不想換行,可以給print函數傳遞一個參數end='',如下。
print(1)
print(2)
print(1, end='')
print(2, end='')
運行結果
1
2
12
>>>
======================================================================================================================================
請確保以上知識大部分都理解,並能獨立完成大部分編程題目,再繼續學習下面的內容。
如果不能保證,可以倍速回看視頻或者閱讀一本網絡教程,教程地址為 https://www.runoob.com/python3/python3-tutorial.html
第四次課 流程圖、分支
目標:
什么是流程圖?有什么用?
什么是思維導圖?有什么用?
學會使用type函數,學會查看python內置函數幫助文檔的方法。 如輸出type(6.7)的結果
學會使用eval函數。如 輸出 eval("3+4")的結果
什么是分支結構,python如何實現分支結構?(*)
什么是代碼塊?
python分支語句有幾種語法結構,分別是怎樣的?
什么是嵌套的分支結構?舉例說明。
學習資源:
https://www.bilibili.com/video/BV1c4411e77t?p=13
謀定而后動(上)
-
09:17
-
P14謀定而后動,知止而有得(下)17:24
-
P15了不起的分支和循環(I)09:21
-
09:53
- 學習教材104頁實例5:身體質量指數BMI,做到理解代碼
作業:
照寫資源中的案例程序,理解並改錯通過。
閱讀教材4.1節並照寫4.1節的案例程序。
照寫教材4.3中的例題程序(BMI)
第九周
第三次實驗 分支及運用分支求解具體問題
簡單分支
程序運行后詢問用戶輸出喜歡吃的水果。用戶輸入蘋果或者香蕉,如果輸入的是蘋果,則輸出蘋果是紅色的。如果用戶輸入的是香蕉,則輸出香蕉是黃色的。
輸入一個字符,判斷輸出該字符是大寫字符還是小寫字符。
輸入一個數字,判斷該數字是奇數還是偶數。
輸入一個表示月份的數字,輸出該月的天數,假設2月為28天。
多個條件
輸入小P的語文和數學成績,如果語文和數學都是90分以上,輸出 “哇,學霸”。如果沒有滿足都是90分以上,但是有一科90分以上,一科80分以上,輸出 “二等獎學金穩了”。如果都沒有達到90分,但是都是80分以上,輸出 “三等獎學金穩了”。如果都是80分以下,但是都是60分以上,輸出 “60分萬歲”。 如果有一個小於60分,輸出 “學渣,再不努力就晚了”。
你知道什么樣的年份是閏年嗎?搜索一下閏年的規則,輸入一個年份,判斷該年份是否是閏年。
輸入一個年份和月份,計算該月有多少天?注意遇到閏年的情況。
輸入百分制成績,輸出對應的等級成績。規則為90分及以上, 輸出A, 80分及以上,輸出B, 70分及以上,輸出C, 60分及以上,輸出D, 60分以下,輸出E。
第五次課 循環的意義,while循環及應用,循環的嵌套
知識和目標
理解循環的作用?
有哪些支持循環的語法?
怎樣對while循環進行控制?
什么是死循環?
如何直接從循環退出?
break 和 continue有什么區別?
else和循環語句配合使用有什么作用?(難點)
什么是循環的嵌套,什么時候可能使用循環嵌套?
什么叫做循環的層數?
學習資源
https://www.bilibili.com/video/BV1c4411e77t?p=18
-
P17了不起的分支和循環(III)08:47
-
12:21
作業:
照寫資源中的案例程序,理解並改錯通過。
第六次課 for循環,可迭代對象
知識和目標
什么是可迭代對象?
什么是迭代?
range有什么用?
舉例說明range的3種用法?
怎樣用for語句實現循環?
學習資源
https://www.bilibili.com/video/BV1c4411e77t?p=19
P19了不起的分支和循環(V)
學習閱讀教材4.4節的內容
學習閱讀教材4.5節的內容(random模塊)
學習閱讀教材4.6節的內容(實例6 計算π值)
作業
照寫資源中的案例程序,理解並改錯通過。
用for語句實現九九乘法表。
照寫教材案例程序和示例代碼。
第10周
第七次課 實驗(基礎 、分支結構)題目解析和答疑
講解實驗(基礎 、分支結構)題目,講解編程思路,結合運用到的知識點。
現場解答疑問,可提前將問題在SPOC教師答疑區提出?
第四次實驗 循環及運用循環求解具體問題
1.數字求和
編寫程序計算如下數列的值:
1-2+3-4...966
其中,所有數字為整數,從1開始遞增,奇數為正,偶數為負
2.水仙花數
"水仙花數"是指一個三位整數,其各位數字的3次方和等於該數本身。
例如:ABC是一個"3位水仙花數",則:A的3次方+B的3次方+C的3次方 = ABC。
請按照從小到大的順序輸出所有的3位水仙花數,請用"逗號"分隔輸出結果。
3.三次登錄機會
給用戶三次輸入用戶名和密碼的機會,要求如下:
1)如輸入第一行輸入用戶名為‘Kate’,第二行輸入密碼為‘666666’,輸出‘登錄成功!’,退出程序;
2)當一共有3次輸入用戶名或密碼不正確輸出“3次用戶名或者密碼均有誤!退出程序。”。
4.實現教材 實例6 計算π值
5.最高分
一開始輸入一個數字n表示有n個同學,然后輸入n個數字表示n個同學的成績,你的程序需要找出這個n個同學成績的最高分,並輸出該最高分。
6. 找函數的極小值。
給定函數,比如f(x) = (x-1)的平方, 給定x的取值范圍,比如從-100到100, 你的程序需要找到這個函數針對自變量的取值范圍內極小值點的位置和極小值。
輸出極小值的位置及極小值。比如以上舉例的輸出為 1, 0.
7.完成教材121頁 第4章的 程序練習題4.1-4.5,其中4.2和4.5涉及未學過的知識,可以不用自己寫,建議看一下教材提供的參考答案,選做4.6羊車門問題。
====================================================================================================
以上內容中的選擇結構和循環結構是非常重要的內容,理論上,學完上面的內容,就可以用Python完成所有的編程題目了。
編程思維就是用這兩種結構的組合來對問題進行求解,需要一定的算法(套路),掌握他們需要一定的練習。一旦掌握就輕松了,而且
很容易遷移到其他的編程語言上,因為編程思想都是相同的,只是語言細節不同。就像大家寫作文,要多看多寫,拿到題目后就很容易想到
總體上的段落結構。
請認真完成以上內容的學習並確保能完成大多數實驗和作業,再繼續下面內容的學習。
算法(補充擴展)
遞推(迭代算法)1
猴子吃桃簡單版(講解思路)
猴子第一天吃一個桃子,以后每天都吃前一天吃的桃子數量的2倍多一個,幫猴子算一下它第10天的時候要吃多少個桃子?
擴展練習
猴子吃桃經典版
猴子第一天摘下若干個桃子,當即吃了一半,還不過癮就多吃了一個。第二天早上又將剩下的桃子吃了一半,還是不過癮又多吃了一個。以后每天都吃前一天剩下的一半再加一個。到第10天剛好剩一個。問猴子第一天摘了多少個桃子?
能不能搞一個猴子吃桃高級版?
斐波那契數列基礎版
斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13,特別指出:第0項是0,第1項是第一個1。從第三項開始,每一項都等於前兩項之和。請你計算一下斐波那契數列的第n項是多少?n由鍵盤輸入。
斐波那契數列進階版
斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13,特別指出:第0項是0,第1項是第一個1。從第三項開始,每一項都等於前兩項之和。請你計算一下斐波那契數列的前n項的和?n由鍵盤輸入。
窮舉(暴力搜索)
打印出所有的 "水仙花數 ",所謂 "水仙花數 "是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個 "水仙花數 ",因為153=1的三次方+5的三次方+3的三次方。
有100個和尚和100個饅頭,大和尚每人分4個,小和尚每4人分一個,大小和尚有多少個?
概率算法,用頻率模擬概率
蒙特卡洛算法求PI值(教材例題)
三羊門問題(教材課后習題)
=====================================================================================================
第八次課 Python字符串格式化輸出,不同類型混合輸出; 字符串處理常用函數和常用字符串處理方法; 字符串索引的概念和應用
知識和目標
理解格式化輸出的含義?
掌握如何控制輸出數據的格式?
利用字符串的format函數控制格式?
利用 % 控制格式?(選)
記憶常用數據類型對應的格式控制符號。
能根據題目的要求編寫代碼控制輸出的格式。
理解什么是函數?
掌握常用字符串處理函數的用法?
理解方法的概念,理解方法和函數的區別。
方法需要通過字符串或者變量加.(點) 來調用。
掌握常用字符串處理方法的用法?
掌握如何從字符串中取得其中的一個字符,理解和掌握索引的概念和用法。 字符串索引指從字符串中取得一個字符的方法
語法舉例
s = 'abc'
print(s[0]) #輸出a , 索引0代表第0個,就是字符a
print(s[-1]) #輸出c,索引-1代表最后一個,輸出c
請自行嘗試其他的索引數字,如1,2,3; -2,-3,-4等,理解索引數字的含義
學習資源(選擇適合自己的一個學習)
視頻
https://www.bilibili.com/video/BV1xs411Q799?p=16
SPOC補充視頻(對應教材3.5節和3.6節)
文本
教材3.5節,字符串類型及操作
教材3.6節,字符串類型的格式化
字符串處理函數 len(x) 字符串長度 str(x) 任意x轉化為對應字符串 hex(x) 整數x變為十六進制小寫字符串 oct(x) 整數x變為八進制小寫字符串 chr(u) unicode編碼返回字符 ord(x) 字符x轉化為unicode編碼 python中字符都是unicode編碼(統一字符編碼) 字符串處理方法 str.lower()/str.upper() 返回字符串的副本,全部小/大寫 str.split(step-None) 返回一個列表,由str根據sep被分隔的部分組成 str.count(sub) 返回子串sub在字符串中出現的次數 str.replace(old,new) 舊字符串替換為新字符串 str.center(width,fillchar) 字符串根據寬度居中,其它填充 str.strip(chars) 去掉字符串中在chars中列出的字符 str.join(iter) 字符串中除了最后一個字符外,每個字符后加一個, 用於字符分隔
作業
完成視頻中的示例程序,完成教材對應章節的示例程序。
繼續完成前面有關分支和循環結構的作業和實驗題目。
字符串專項練習
是否是回文字符串
回文字符串是指正序讀和反序讀都一樣的字符串,輸入一個字符串,判斷該字符串是否是回文字符串。
是否是有效的車牌號碼
車牌號碼由5位字母和數字組成,其中字母必須都是大寫字母,並且至少有一位數字,輸入一個車牌號碼,你的程序判斷一下該號碼是否是一個有效的車牌號碼。
是否限行
C城市為了環保和緩解道路交通壓力,實行尾號現行,規則為:周一限行尾號為1和6的車輛,周二限行尾號為2和7的車輛,周三限行尾號為3和8的車輛,周四限行尾號為4和9的車輛,周五限行尾號為5和0的車輛;周六周天不限行。
輸入一個車牌和一個表示星期幾的數字,你的程序要計算該車牌號碼該天是否現行,輸出是或者否。
輸出名字最長的國家
程序接收多個國家的名字字符串,你的程序輸出長度最長的國家的名字。
身份證號提取出生日期
從身份號碼中可以看出一個人的出生日期,你的程序接收一個身份證號碼,輸出這個人的出生日期,輸出格式舉例:2000年10月08日。
第11周
第九次課 循環實驗題目解析和答疑
解析循環實驗中給出的實驗題目,講解求解思路和會用到的語法基礎。
現場解答SPOC答疑區中的問題。
演示如何在Python123中完成SPOC中提到的作業。
指導注冊Python123平台, 加入對應課程。
第五次實驗 完成Python123平台注冊與課程加入,加入課程SPOC平台
學會在Python123平台完成編程作業,完成平台發布的編程作業。
實驗題目將在python123平台上發布,后面上機考試也在123平台上完成,在Python123平台發布的編程作業、測驗和編程考試將計入期末成績(占比很大),學會使用該平台。
Python123平台地址
https://www.python123.io/ 課程代碼: C3554
SPOC平台主要提供了教材配套視頻講解和課件下載,同時提供討論區功能,討論區提問和回答次數將計入平時成績,具體規則進入SPOC課程后見課程說明,學會使用SPOC平台。
SPOC平台地址
https://www.icourse163.org/spoc/course/SICNU-1461324161, 課程加入密碼為20201106
第六次實驗 完成Python123平台發布的實驗作業1
題目發布在平台上
第12周
第十次課 列表 基本概念、索引和切片
目標
理解列表的作用?掌握定義列表的語法。
列表中的元素必須是相同類型的數據嗎?
可以不相同,這點和C語言不一樣
掌握依次訪問列表中每個元素的方法。
什么是下標索引?如何求列表的長度?
注意:索引是從0開始,和C語言是一樣的
什么是列表的切片?切邊的使用有哪些靈活性?
省略,步長(可正負)
列表的操作
用列表方法來完成
增(append, extend, insert)、刪除(remove, pop, clear)、改、查
學會如何查找方法的幫助文檔,幫助文檔會告訴你如何使用這些方法。
判斷一個數據是否在列表中 ,可以使用 in 運算
如 a = [1, 2, 3]
1 in a 將返回True, 4 in a 將返回False
資源
https://www.bilibili.com/video/BV1c4411e77t?p=20
https://www.bilibili.com/video/BV1c4411e77t?p=21
作業
照寫資源中的代碼並理解其含義。
用列表解決求最大成績問題,提示:將所有成績放入一個列表,max函數可以求列表中的最大元素。
列表中的索引和切片語法同樣適用於字符串,自己設計代碼進行驗證。
思考:字符串和列表有哪些不同?
通過以上內容學習,已掌握理解教材P35頁 實例1.1 溫度轉換程序所需要的知識點,自行學習並理解教材實例1.1的代碼。
第十一次課 列表元素修改,查找元素,列表運算,嵌套列表
目標
修改列表元素
利用索引和切片實現
對列表元素進行排序(難點)
排序函數,從小到大,從大到小
查
count, index, copy,用切片實現拷貝
列表的運算
+(拼接)
* (重復元素)
嵌套列表(難點,需反復學習和討論)
列表中的元素還是列表
嵌套列表可以用於構建二維結構,比如矩陣
通過索引訪問嵌套列表中的元素。支持一個索引和兩個索引,注意他們的區別。
資源
https://www.bilibili.com/video/BV1c4411e77t?p=22
https://www.bilibili.com/video/BV1c4411e77t?p=23
閱讀教材160頁-165頁。
作業 列表專項訓練
照寫案例中的示例代碼。
自己實現教材實例9的題目要求。
成績處理
先輸入一個數n,表示班級同學的數量,然后輸入n個整數,表示每個同學的成績。老師希望班級的成績不要太難看,因此想寫個程序計算一下班級是否有一半的同學不及格(小於60分),如果有,則每個同學的成績加10分; 如果沒有,則成績保持不變。請你幫老師寫一個程序,輸出按照這個規則處理之后的每個同學的成績。
""" 先輸入一個數n,表示班級同學的數量,然后輸入n個整數,表示每個同學的成績。老師希望班級的成績不要太難看,因此想寫個程序計算一下班級是否有一半的同學不及格(小於60分),如果有,則每個同學的成績加10分; 如果沒有,則成績保持不變。請你幫老師寫一個程序,輸出按照這個規則處理之后的每個同學的成績。 """ n = int(input()) scores = [] #定義一個空列表 for i in range(n): sc = int(input()) scores.append(sc) #將每個人的成績添加到列表的末尾 #計算總成績和平均分 totle = sum(scores) ave = totle/len(scores) print('同學原始成績', scores) print('平均成績', ave) #如果平均分小於60分, 則每個人加10分 if ave<60: for i in range(n): scores[i] += 10 print('調整后的成績', scores)
是否有相同
輸入n個數字,程序判斷這n個數字中是否有相同的數字。
""" 輸入n個數字,程序判斷這n個數字中是否有相同的數字。 """ """ 解題思路:先將輸入的n個數字放入列表中 然后遍歷列表中是否有相同的數字 """ n = int(input()) ls = [] #定義一個空列表 for i in range(n): x = int(input()) ls.append(x) #將每個輸入的數字添加到列表的末尾 b_same = False #先假設沒有相同的數字 for x in ls: if ls.count(x)>1: #看ls列表中有多少個與x相同的數字 b_same = True #成立說明有相同的數字 break if b_same==True: print('some number is same in list') else: print('no same numbers in list')
有相同退出輸入
不斷的接收鍵盤輸入的數字,一旦遇到輸入的數字之前已經輸入過了,則退出,輸出一共輸入了多少個不相同的數字?
""" 有相同退出輸入 不斷的接收鍵盤輸入的數字,一旦遇到輸入的數字之前已經輸入過了,則退出,輸出一共輸入了多少個不相同的數字? """ """ 解題思路:在一個循環中寫輸入的代碼,當輸入過相同的數字的時候,退出循環 同時統計有多少個不相同的數字 """ cnt = 0 ls = [] #定義一個空列表,用於存放輸入的所有數字 b_same = False while not b_same: x = int(input()) if x not in ls: #x不在列表中成立,說明之前沒有輸入過 ls.append(x) else: b_same = True # 列表的長度就是不相同數字的數量 print('you have inputed {} not same numbers'.format(len(ls)))
找最小
輸入n個數字,程序輸出n個數字中最小的數字及最小的數字是第幾個數字。
""" 找最小 輸入n個數字,程序輸出n個數字中最小的數字及最小的數字是第幾個數字。 """ """ 找最小 min函數可以直接找到列表中的最小值, 找到后用index方法定位最小值的位置 """ n = int(input()) ls = [] #定義一個空列表 for i in range(n): x = int(input()) ls.append(x) #將每個輸入的數字添加到列表的末尾 min_value = min(ls) min_pos = ls.index(min_value) print('the min value is', min_value, 'at ', min_pos, 'position')
分數段統計
輸入n個同學的成績,你的程序需要統計一下每個分數段的人數,分數段包括60分以下,[60-70), [70-80), [80-90), [90-100], 統計並輸出各分數段的人數。
""" 分數段統計 輸入n個同學的成績,你的程序需要統計一下每個分數段的人數, 分數段包括60分以下,[60-70), [70-80), [80-90), [90-100], 統計並輸出各分數段的人數。 """ """ 解題思路 """ n = int(input()) ls = [0,0,0,0,0,0,0,0,0,0] #定義一個列表,有9個元素,用於存放每個分數段的人數 for i in range(n): x = int(input()) #輸入每個人的成績 i = x//10 # 對應分數段索引 i = 9 if i==10 else i # 索引為10變為索引為9 ls[i] += 1 #對應分數段人數加1 print('成績分布表') print(ls) print('<60', sum(ls[0:6])) print('[60,70)', ls[6]) print('[70,80)', ls[7]) print('[80,90)', ls[8]) print('[90,100]', ls[9])
成績處理(進階挑戰, 處理在一行中輸入多個數據)
輸入一行若干個數字,數字之間用空格間隔,代表每個同學的成績。老師希望班級的成績不要太難看,因此想寫個程序計算一下班級是否有一半的同學不及格(小於60分),如果有,則每個同學的成績加10分; 如果沒有,則成績保持不變。請你幫老師寫一個程序,輸出按照這個規則處理之后的每個同學的成績。提示:使用字符串的split方法。
s = input() #接收的是字符串,比如 s = "45 76 56 98" #將字符串轉換為數字列表 s = s.replace(' ', ',') s = "45,76,56,98" scores = list(eval(s)) #利用eval將字符串表達式計算為數值 print(scores) totle = sum(scores) ave = totle/len(scores) print('同學原始成績', scores) print('平均成績', ave) #如果平均分小於60分, 則每個人加10分 if ave<60: for i in range(n): scores[i] += 10 print('調整后的成績', scores)
第十二次課 變量名的本質、深淺拷貝(本節課較難,盡量理解,不做硬性要求)
知識目標
is 運算符
id 函數
Python中的變量名都是引用型變量,列表中的元素也是引用(難點,盡量理解)
深淺拷貝的含義
如何調用方法
資源
https://www.bilibili.com/video/BV1c4411e77t?p=24
作業
照寫資源中的代碼,調試通過
用資源中學到的知識解釋以下現象
>>> a = [1,2,3]
>>> b = a
>>> a[1] = 4
>>> b
[1, 4, 3]
>>> a = [[1]]*3
>>> a
[[1], [1], [1]]
>>> a[1][0] = 2
>>> a
[[2], [2], [2]]
-----------------------------------------------
注意整數和列表不一樣,整數是不可變類型
>>> a = 1
>>> b = a
>>> a = 2
>>> b
1
第十三次課 列表推導式、帶條件的列表推導式、復雜(嵌套)列表推導式(較難 一般掌握)
知識目標
列表推導式的用法
帶條件的列表推導式
復雜(嵌套)列表推導式
資源
https://www.bilibili.com/video/BV1c4411e77t?p=25
https://www.bilibili.com/video/BV1c4411e77t?p=25
作業
照寫資源中的代碼,調試通過
第六次實驗 完成列表應用相關的作業和實驗
第十四周 課程安排
第一次
課前
利用碎片時間學習如下鏈接的內容 python程序設計基礎_中國大學MOOC(慕課) (icourse163.org) 學習該鏈接小節的前3個視頻內容
課中
完成雨課堂上發布的測試題(測試題),測驗題的分數將計入期末成績。
兩個人一組,互相給對方講解作業 列表專項訓練中的題目代碼。
小組討論雨課堂上發布的測試題,特別是沒有作對的題目。
照寫作業 列表專項訓練中的題目代碼。
課后
完成123平台對應練習和實驗。
第二次
課前
思考作業 列表專項訓練中的題目的解題思路。
課中
默寫作業 列表專項訓練中的題目代碼。
課后
完成123平台對應練習和實驗。
第三次
課前
利用碎片時間學習如下鏈接的內容 python程序設計基礎_中國大學MOOC(慕課) (icourse163.org) 學習該鏈接小節的第4、5個視頻內容
課中
對照教材,理解集合的含義,集合有關的語法和方法,照寫教材和視頻中的集合案例,實現教材實例9
實現集合編程專項訓練,寫成代碼。
課后
完成123平台對應練習和實驗。
集合編程專項訓練
輸入若干個整數,求這些整數中有多少個不一樣的數字,並輸出這些不一樣的數字。
輸入若干個整數,求這些整數中有多少個不重復的數字,並輸出這些不重復的數字。
輸入若干個整數,求這些整數中有多少個重復的數字,並輸出這些重復的數字。
A專業開了一些課,B專業開了另外一些課,計算一下A專業開了但是B專業沒有開的課。
A專業開了一些課,B專業開了另外一些課,計算一下A專業開了同時B專業也開了的課。
A專業開了一些課,B專業開了另外一些課,計算一下A專業和B專業都開了的哪些課。
=========================================================================================================================================
高級應用訓練(難度高,跳幾跳,達得到,擴展思維)
排序系列
集合
班級人員信息統計
題目描述 輸入a,b班的名單,並進行如下統計。 輸入格式: 第1行::a班名單,一串字符串,每個字符代表一個學生,無空格,可能有重復字符。 第2行::b班名單,一串字符串,每個學生名稱以1個或多個空格分隔,可能有重復學生。 第3行::參加acm競賽的學生,一串字符串,每個學生名稱以1個或多個空格分隔。 第4行:參加英語競賽的學生,一串字符串,每個學生名稱以1個或多個空格分隔。 第5行:轉學的人(只有1個人)。 輸出格式 特別注意:輸出人員名單的時候需調用sorted函數,如集合為x,則print(sorted(x)) 輸出兩個班級的所有人員數量 輸出兩個班級中既沒有參加ACM,也沒有參加English的名單和數量 輸出所有參加競賽的人員的名單和數量 輸出既參加了ACM,又參加了英語競賽的所有人員及數量 輸出參加了ACM,未參加英語競賽的所有人員名單 輸出參加英語競賽,未參加ACM的所有人員名單 輸出參加只參加ACM或只參加英語競賽的人員名單 最后一行:一個同學要轉學,首先需要判斷該學生在哪個班級,然后更新該班級名單,並輸出。如果沒有在任何一班級,什么也不做。 輸入樣例: abcdefghijab 1 2 3 4 5 6 7 8 9 10 1 2 3 a b c 1 5 10 a d e f a 輸出樣例: Total: 20 Not in race: ['4', '6', '7', '8', '9', 'g', 'h', 'i', 'j'], num: 9 All racers: ['1', '10', '2', '3', '5', 'a', 'b', 'c', 'd', 'e', 'f'], num: 11 ACM + English: ['1', 'a'], num: 2 Only ACM: ['2', '3', 'b', 'c'] Only English: ['10', '5', 'd', 'e', 'f'] ACM Or English: ['10', '2', '3', '5', 'b', 'c', 'd', 'e', 'f'] ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
生日悖論 生日悖論,指如果一個房間里有23個或23個以上的人,那么至少有兩個人的生日相同的概率要大於50%。嘗試編程驗證。 驗證方法提示:使用從1到365的整數代表生日。測試n次,每次生成23個隨機數,隨機數的范圍從1到365(包括365)。 然后查看有無重復的生日。 最后算出重復的比率。 輸入格式: 隨機數種子x 測試次數n 注意:需將x轉換為整數型再進行設置。 輸出格式: rate=算出的比率,比率保留2位小數 輸入樣例: 3 1000 輸出樣例: rate=0.54
二維數據結構存儲與算法練習
一個班級有若干名同學,每個同學學習了若干課程,現在需要將每個同學的每個課程保存起來(提示:所有數據可以看作是一個數據表格,一行代表一個同學,一列代表一門課程,考慮用嵌套列表來保存)。
1 數據可以在程序中直接賦值(簡單),也可以通過輸入獲得成績(稍微復雜一點,考慮如何輸入大量數據)
2 求所有成績的最高分和最低分。
3 求每個人的平均分,求每一門課程的平均分。
4 將所有數據保存到文件。
第十四次課 學習教材第二章 Python程序實例解析、Python畫圖
目標:
利用已有知識點學習閱讀教材案例
學習turtle繪圖庫的基本用法
資源
教材第2章
SOPC 圖形繪制
http://www.icourse163.org/learn/preview/SICNU-1461324161?tid=1462098441#/learn/content?type=detail&id=1239068537
作業
照寫教材案例
以小組為單位,完成一幅創意繪圖作品,上傳到Python123平台
參考資料
教材目錄及筆記, https://blog.csdn.net/ovo2263/article/details/108046581
Python菜鳥教程,https://www.runoob.com/python3/python3-tutorial.html
*****************************************************************************************************************************
案例:
python畫遞歸樹
1 import turtle 2 3 t = turtle.Turtle() 4 def draw_tree(step, deep=0): 5 """ 6 step為樹干長度,deep為當前葉子深度 7 """ 8 if deep==4: 9 return 10 t.forward(step) #畫樹干 11 12 #畫左子樹,需要將角度變化回原始角度 13 t.left(25) 14 draw_tree(step//2, deep+1) 15 t.right(25) 16 17 #畫右子樹,需要將角度變化回原始角度 18 t.right(25) 19 draw_tree(step//2, deep+1) 20 t.left(25) 21 22 #左右子樹都畫完,讓小烏龜回到樹干的起始位置 23 t.backward(step) 24 25 26 t.left(90) 27 draw_tree(100, 0)