新教材習題解析之python循環(huán)結(jié)構(gòu)(2)
說在前面
下學期開始,絕大多數(shù)學校就要開始上新教材內(nèi)容了,必修一《數(shù)據(jù)與計算》的主要內(nèi)容是Python語言學習。新教材的理念是編程教學不應該只教語法,更重要的是教學生如何解決問題,如何使用計算機編程解決實際問題。所以命題的思路不應該是摳語法,應盡量避免考查語法細節(jié),要把重點放在數(shù)學建模和解決問題上面。
受《新時代領航技術同步用書》編委會的邀請,我也嘗試著編制了一些題目,盡可能按照新課標的要求,力求能夠激發(fā)學生思考和考查學生的計算思維。
上次已經(jīng)和大家分享了2道關于Python循環(huán)結(jié)構(gòu)的開放性題目,由于循環(huán)結(jié)構(gòu)是編程教學的一個難點,必須多加練習才能掌握,所以今天繼續(xù)和大家分享2道相同類型的題目。
由于新教材是塊新大陸,我們都是在摸索前行,加之本人水平有限,在描述題目用語和控制題目難度方面都存在不足,敬請大家批評指正。

例6.(開放題)李白買酒。李白街上走,提壺去買酒。遇店加一倍,見花喝一斗。店不相鄰開,花不成雙長。三遇店和花,喝光壺中酒。請問此壺中,原有多少酒?
(1)“店不相鄰開,花不成雙長”是什么意思?
(2)李白喝酒和買酒有什么規(guī)律?這個規(guī)律重復了幾次?
(3)要計算酒壺中原有多少酒,可以從后向前倒推,利用重復的規(guī)律推導出原有酒的數(shù)量,你打算使用哪種算法結(jié)構(gòu)來編程實現(xiàn)上述功能?請寫出具體的代碼,并添加必要的注釋。

解析:(1)“店不相鄰開,花不成雙長”的意思是不會連續(xù)的經(jīng)過酒店和花,即不會連續(xù)的添酒和喝酒。
(2)李白喝酒的規(guī)律是“遇店加一倍,見花喝一斗”,這個規(guī)律重復了3次。
(3)要計算酒壺中原有多少酒,可以從后向前倒推,最后喝完為0,往前遇到鮮花加1斗,再往前遇到酒店減為一半。如此操作三次之后,得到的數(shù)字即為初始狀態(tài)時酒的數(shù)量。可以使用循環(huán)結(jié)構(gòu)來實現(xiàn)算法功能,參考代碼如下:
a = 0 #存儲酒的數(shù)量,喝完時為0
#從后向前倒推原有酒的數(shù)量
for i in range(3):
a += 1 #見花喝一斗
a /= 2 #遇店加一倍
print(a) #輸出原有酒的數(shù)量
拓展思考:
8.(開放題)廈門鼓浪嶼有一副很有趣的對聯(lián):霧鎖山頭山鎖霧;天連水尾水連天。它叫回文聯(lián),既可順讀,也可倒讀,頗具趣味,是我國的重要傳統(tǒng)文化之一。我們可以從鍵盤輸入一個字符串s,然后編寫程序判斷其是否為回文字符串。
s = input('請輸入一個字符串:')
L, R = 0, len(s) - 1
while ① :
if s[L] != s[R]:
print(s, '不是回文字符串')
②
L, R = ③
else:
print(s, '是回文字符串')
需要本文word版和拓展思考答案的,可以加入“Python算法之旅”知識星球參與討論和下載文件,“Python算法之旅”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。
我們專注Python算法,感興趣就一起來!
相關優(yōu)秀文章:
