Python程序語言設計基礎(第二版)程序練習題
3.1 重量計算,月球上物體的體重是在地球上的16.5%,假如你在地球上每年增長0.5kg,編寫程序輸出未來10年你在地球和月球上的體重狀況。
current_weight = float(input('當前體重kg:'))
for i in range(1,11):
current_weight += 0.5
moon_weight = current_weight*16.5/100
print('第{:d}年,地球體重{:.2f}kg,月球體重{:.2f}kg'.format(
i,current_weight,moon_weight
))
運行結果:
當前體重kg:50
第1年,地球體重50.50kg,月球體重8.33kg
第2年,地球體重51.00kg,月球體重8.41kg
第3年,地球體重51.50kg,月球體重8.50kg
第4年,地球體重52.00kg,月球體重8.58kg
第5年,地球體重52.50kg,月球體重8.66kg
第6年,地球體重53.00kg,月球體重8.74kg
第7年,地球體重53.50kg,月球體重8.83kg
第8年,地球體重54.00kg,月球體重8.91kg
第9年,地球體重54.50kg,月球體重8.99kg
第10年,地球體重55.00kg,月球體重9.07kg
3.2 天天向上續。盡管每天堅持,但人的能力發展並不是無限的,它符合特定模型。假設能力增長符合如下帶有平台期的模型:以7天為周期,連續學習3天能力值不變,從第四天開始至第七天每天能力增長為前一天的1%。如果7天中有1天間斷學習則周期從頭計算。請編寫程序回答,如果初始能力值為1,連續學習365天后能力值是多少?
initial_value = 1
for i in range(365):
if i%7 in [4,5,6,0]:
initial_value = initial_value*(1+0.01)
print('{:.5f}'.format(initial_value))
運行結果:
8.00142
天天向上續。采用程序練習題3.2的能力增長模型,如果初始能力為1,固定每10天休息1天,365天后能力值是多少?如果每15天休息一天呢?
每10天休息1天
initial_value = 1
increased_capacity = 0.01
for i in range(365):
if i%7 in [4,5,6,0] and i%10 != 0:
initial_value = initial_value*(1+increased_capacity)
print('{:.5f}'.format(initial_value))
運行結果:
6.49259
每15天休息1天
initial_value = 1
increased_capacity = 0.01
for i in range(365):
if i%7 in [4,5,6,0] and i%15 != 0:
initial_value = initial_value*(1+increased_capacity)
print('{:.5f}'.format(initial_value))
運行結果:
7.03055
3.4 回文數判斷,設n是一任意自然數,如果n的個位反向排列所得自然數與n相等,則n被稱為回文數。從鍵盤輸入一個5位數字,請編寫程序判斷這個數字是不是回文數。
number = input('請輸入一個數字:')
number_int = int(number)
if number_int/10000 >= 1:
if number[0]==number[4] and number[1]==number[3]:
print(number)
else:
print('這個數不是回文數')
else:
print('輸入的數字不是5位數')
運行結果:
請輸入一個數字:34543
34543
3.5 田字格的輸出。使用print()函數輸出如圖3.6所示樣式的田字格。
n = eval(input('請輸入一個奇數:'))
a,b,c,d = '-','┼','∣',' '
m = n//2
if n%2 == 1:
for i in range(n):
if i in [0,m,n-1]:
print('{0}{1}{0}{1}{0}'.format(b,a*m))
else:
print('{0}{1}{0}{1}{0}'.format(c,d*2*m))
else:
print('輸入的不是奇數')
# 在maskdown中田字格顯示和終端中顯示有所區別,因此不予展示
3.6 文本進度條。仿照實例4,打印如下形式的進度條。
實例4:
import time
scale = 10
print('------執行開始------')
for i in range(scale+1):
a,b = '**' * i,'..' * (scale-i)
c = (i/scale)*100
print('%{:^3.0f}[{}->{}'.format(c,a,b))
time.sleep(0.1)
print('------執行結束------')
修改后:
import time
scale = 100
for i in range(scale+1):
a,b = 'Staring..','Done.'
c = (i/scale)*100
if c<=99:
print('\r{} {:^3.0f}%'.format(a,c),end='')
else:
print('\r{} {:^3.0f}% {}'.format(a,c,b))
time.sleep(0.1)
#輸出效果
Staring.. 100& Done.
3.7 文本風格。將如下程序段存成文件,在控制台終端(如 Windows 的cmd.exe)。運行該程序,觀察輸出結果。更改print()函數的參數,例如,去掉 end 的賦值,再觀察運行結果。
源代碼:
while True:
for i in ['/','-','|','\\','|']:
print('%s\r' % i,end='')
5個符號無限循環下去
去掉 end='' 則末尾換行,5個符號豎列循環
去掉 \r 則光標繼續在末尾,5個符號依次橫向循環
3.8 小巧而精致的第三方進度條工具庫。tqdm 是一個快速、擴展性強的進度條工具庫。tqdm 是一個第三方庫,首先需要安裝,然后才能運用。本書8.6節將詳細介紹第三方庫的安裝方法。請讀者提前參考閱讀。運行如下程序,觀察運行結果。
源代碼:
from tqdm import tqdm
from time import sleep
for i in tqdm(range(1,100))
sleep(0.01)