python123(Python程式語言設計)-----練習3:基本資料型別
例項3:天天向上的力量
描述
工作日模式要努力到什麼水平,才能與每天努力1%一樣?
-A君: 一年365天,每天進步1%,不停歇
-B君: 一年365天,每週工作5天休息2天,休息日下降1% ,要多努力呢?
每週工作5天休息2天,計算工作日的努力引數是多少才能與每天努力1%一樣。
要求如下:
(1) 一年365天,以第1天的能力值為基數,記為1.0;
(2) 當好好學習時,能力值相比前一天提高1%;當沒有學習時,由於遺忘等原因能力值相比前一天下降1%;
程式碼實現:
def dayUP(df):
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup*(1 - 0.01)
else:
dayup = dayup*(1 + df)
return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
dayfactor += 0.001
print("工作日的努力引數是:{:.3f}".format(dayfactor))
例項4:文字進度條
程式碼實現:
import time
scale = 50
print("執行開始".center(scale//2,'-'))
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"執行結束".center(scale//2,'-'))
三次方格式化:
描述:
獲得使用者輸入的一個數字,可能是整數或浮點數,a,計算a的三次方值,並列印輸出。
輸出結果採用寬度20個字元、居中輸出、多餘字符采用減號(-)填充。
如果結果超過20個字元,則以結果寬度為準。
輸入輸出例項:
程式碼實現:
a= eval(input())
print("{:-^20}".format(pow(a,3)))
星號三角形:
描述:
讀入一個整數N,N是奇數,輸出由星號字元組成的等邊三角形,要求:
第1行1個星號,第2行3個星號,第3行5個星號,依次類推,最後一行共N的星號。
輸入輸出例項:
程式碼實現:
n =eval(input())
for i in range(1, n+1, 2):
print("{0:^{1}}".format('*'*i,n))
凱撒密碼:
描述:
愷撒密碼是古羅馬愷撒大帝用來對軍事情報進行加解密的演算法,它採用了替換方法對資訊中的每一個英文字元迴圈替換為字母表序列中該字元後面的第三個字元,即,字母表的對應關係如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
對於原文字元P,其密文字元C滿足如下條件:C=(P+3) mod 26
上述是凱撒密碼的加密方法,解密方法反之,即:P=(C-3) mod 26
假設使用者可能使用的輸入包含大小寫字母a~zA~Z、空格和特殊符號,請編寫一個程式,對輸入字串進行愷撒密碼加密,直接輸出結果,其中空格不用進行加密處理。使用input()獲得輸入。
輸入:示例1: python is good
輸出: 示例1: sbwkrq lv jrrg
程式碼實現:
#凱撒密碼加密
s = input("請輸入:")
who = "" #定義一個空字串,用來存放加密後的字元
for c in s: #字串遍歷迴圈
if 'a' <= c <= 'z': #小寫字母情況
who += chr(ord('a') + ((ord(c)-ord('a')) + 3) % 26)
elif 'A' <= c <= 'Z': #大寫字母情況
who += chr(ord('A') + ((ord(c) - ord('A')) + 3) % 26)
else:
who += c #若是其他字元直接繼承存入,不做任何修改
print(who) #打印出加密後的字串
#凱撒密碼解密
s = input("請輸入:")
who = "" #定義一個空字串,用來存放解密後的字元
for c in s: #字串遍歷迴圈
if 'a' <= c <= 'z': #小寫字母情況
who += chr(ord('a') + ((ord(c)-ord('a')) - 3) % 26)
elif 'A' <= c <= 'Z': #大寫字母情況
who += chr(ord('A') + ((ord(c) - ord('A')) - 3) % 26)
else:
who += c #若是其他字元直接繼承存入,不做任何修改
print(who) #打印出解密後的字串
程式碼知識點分析:
- 字串遍歷迴圈:
for c in s:
<語句塊>
s是字串,遍歷字串每個字元,產生迴圈
- 字串處理函式
1.chr(x) : x為Unicode編碼,返回其對應的字元
2.ord(x) : x為字元,返回其對應的Unicode編碼數字
- 定義一個空字串
who = ""