截止日期
實驗目標
- 繼續熟悉for循環與turtle
- 數值運算符
- math庫常用函數
- 字符串轉化為數值類型(int, float, complex)
- 字符串常用函數
實驗內容
任務1.使用for代替while改寫圓形生成器。
圓形生成器參考代碼:
def calcArea(r):
return 3.14*r*r
n = eval(input("n="))
rList = []
while n > 0: # 練習1:嘗試使用for改造while循環
r = eval(input("Please input r:"))
rList.append(r)
n = n - 1
for e in rList:
print(calcArea(e))
#任務2:用turtle將rList中的所有半徑畫成對應的圓形
作業1. 如果需要循環n次,使用for循環與while循環有何不同?
任務2 數值運算符號-取整、求余(特別考核,PTA)
//運算符為取整,即取得兩數相除所得到的整數部分,10//3得3。
%運算符為求余符號,即取得兩數相除所得到的余數部分,10%3得1。
這兩種運算符都是計算機中常用的運算符。
找錢問題:買單時,營業員要為用戶找錢。營業員手里有10元、5元、1元(假設1元為最小單位)幾種面額的鈔票,其希望以盡可能少(張數)的鈔票將錢換給用戶。比如,需要找給用戶17元,那么其需要給用戶1張10元,1張5元,2張1元。而不是給用戶17張1元或者3張5元與2張1元。
輸入:17
輸出:需找10元1張,5元1張,1元2張
2.1 直接使用//與%對給定值,進行換算。
2.2 將2.1步驟定義成函數(考核):
def giveChange(money): #money為要找的錢
#提示1: 使用x10,x5,x1分別用於存放10元,5元,1元鈔票的張數
#提示2: 使用字符串的format來組裝輸出結果
#提示3: 主要使用//與%運算符。
#該函數無需return,直接返回print輸出結果
#1. 使用input提示"請輸入余額"。注意:需要使用int或者eval函數將字符串轉化為證書
#2. 調用giveChange函數,輸出結果。
作業2:代碼閱讀
IPO分析:上述問題的IPO分別是什么?
手寫或者打印代碼,然后為代碼每行做注釋
任務3.math庫常用函數
3.1.閱讀並運行如下代碼,嘗試解釋該段代碼含義
案例:天天向上。1年365天,如果好好學習時能力值相比前一天提高1%,放任時相比前一天下降1%。1年后,效果相差多少呢?
import math
dayfactor = 0.01
dayup = math.pow((1.0 + dayfactor), 365) # 每天提高0.01
daydown = math.pow((1.0 - dayfactor), 365) # 每天荒廢0.01
print("向上: {:.2f}, 向下: {:.2f}.".format(dayup, daydown))
3.2 銀行存款問題:
假設銀行存款年利率為rate%,存入一筆錢(money),n年后將得到多少錢。
a) 直接運算。
b) 使用IPO分析該問題,將步驟a)中的核心算法定義成函數。函數的輸入參數應該是哪幾個,返回(return)什么?嘗試調用該函數,驗證你的函數是否書寫正確。
任務4. 回文問題(特別考核,PTA):
回文字符串,就是一個字符串,從左到右讀和從右到左讀是完全一樣的。如,a, aba, 123454321都是回文。編寫一個函數判斷輸入的字符串是否是回文,如果是則返回True,否則返回False。
調用的時候:從鍵盤輸入一個字符串line,然后調用該函數判斷line是否為回文。如果是回文,輸出"line是回文",否則輸出“line不是回文”。注意:這里的line應該是你輸入的那個字符串。
准備知識: == 進行是否相等的判斷, != 進行是否不等於的判斷, len()函數代表求序列長度,比如可以求字符串的長度,len(str1)代表求字符串str1的長度。
1.初級版:只判斷長度為5的字符串是否為回文。先使用中文描述,然后將其轉化為代碼。進階:將該功能定義成函數。
2.進階版:能判斷任意長度(>0)的字符串是否為回文。特別考核:將其定義為函數。
3.去除空格:有時輸入的字符串帶空格會導致判斷結果不符合預期,比如輸入" abcba ",會返回False。現需要對輸入的字符串進行預處理,去掉其左右空格后再判斷。嘗試編程實現。
4.判斷是否是數字:處理輸入時,希望輸入的所有字符均為數字,一旦發現字符串中有其他字符就提示“您所輸入的字符串含有非數字字符”,嘗試編程實現。
作業3:
完成其中的3、4,參考課本字符串的函數。
任務5.天天向上(編程)-特別考核
閱讀課本P76的實例代碼3.4,解決課后題3.2。
進階:使用函數改造課后題3.2。
作業:嘗試解決課后題3.3。
任務6.字符串常用函數-預習
6.1 代碼閱讀(ord函數)
嘗試運行並解釋下列代碼的含義(建議寫在紙上)
plaincode = input("請輸入明文: ")
for p in plaincode:
if ord("a") <= ord(p) <= ord("z"):
print(chr(ord("a") + (ord(p) - ord("a") + 3)%26), end='')
else:
print(p, end="")
作業4:
4.1 為上述代碼每一行添加注釋
4.2 使用函數改寫上面的for中的內容,輸入參數是什么?
4.3 改寫4.2,不要使用print直接輸出結果,而是將結果return出來。
6.2 嘗試使用字符串的format函數與*(字符串相乘)輸出如下所示的田字格:

作業5:
5.1 請使用字符串相乘簡化代碼
5.2 特別考核:觀察每行規律,請使用for循環改寫。
任務7.文本進度條-預習
7.1 嘗試運行並讀懂課本P89-91示例4.1-4.3,並為4.3每一行加注釋,並回答為什么輸出要有一個\r。(建議寫在紙上)
7.2 在命令行控制台下運行如下代碼,觀察運行結果,為下面每行程序加注釋,並回答為何會產生這種運行效果。(建議寫在紙上)
import time
while True:
for i in ['/','-','|','\\','|']:
print("%s\r"%i, end = '')
time.sleep(0.05)
任務8.文本進度條-特別考核
實現課后題3.6。
選做:課后題3.8
需先使用下列命令安裝tqdm第三方庫,然后運行:
pip3 install tqdm -i https://pypi.douban.com/simple
