五道python練習題,領略編程方法的魅力!

五道python練習題,領略編程方法的魅力!

本文將通過5個小練習,來體會程序編寫的思路,領略編程方法的魅力。

(私信小編007即可自動獲取Python視頻教程以及各類PDF!)

五道python練習題,領略編程方法的魅力!

有 1、2、3、4 個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?

使用枚舉法我們也能解決該問題,在Python中我們用循環和判斷來實現。三個數互不相同數學中這樣表示:

五道python練習題,領略編程方法的魅力!

從1到4分別取出4個數字,當滿足以上條件時輸出:

"""
有 1、2、3、4 個數字,能組成多少個互不相同且無重複數字的三位數?都是多

少?
"""
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i != j and i != k and j !=k:
print(i,j,k)


以下為輸出結果:

五道python練習題,領略編程方法的魅力!

打印出所有的“水仙花數”

“水仙花數”是指一個三位數,其各位數字立方和等於該數本身。例如: 153 是一個“水仙花數” ,因為滿足這個條件:

五道python練習題,領略編程方法的魅力!

只要能分別取到這個數的百位、十位、個位的數字,分別進行立方運算後再相加,如果結果等於這個數,那麼這個就是水仙花數。

實現代碼如下:

"""
打印出所有的“水仙花數” ,所謂“水仙花數”是指一個三位數,其各位數字立
方和等於該數本身。例如: 153 是一個“水仙花數” ,因為 153=1 的三次方+5 的三次方

+3的三次方。
"""
for i in range(100,1000):
# 將數字轉換成字符串
digit_str = str(i)
# 分別取出百位,十位,個位數字,由於字符串不能進行數值運算,eval函數作用為去除最外層的引號,得到數字
bai = eval(digit_str[0])
shi = eval(digit_str[1])
ge = eval(digit_str[2])

if bai ** 3 + shi ** 3 + ge ** 3 == eval(digit_str):
print(digit_str)


輸出結果如下:

五道python練習題,領略編程方法的魅力!

求 1+2!+3!+...+20! 的和

這個是一個累乘在累加的過程,首先我們可以先算各個整數階乘的值,然後逐一相加。Python中的累加或者累乘可以理解為拿個籃子取裝蘋果,剛開始是空籃子,然後一個一個地往裡面放蘋果,每次放蘋果進去之前,籃子內都放在之前已經裝好地蘋果;當結束往裡面放蘋果時,這個籃子就存放著累加後地總蘋果數。

實現代碼如下:

"""
求 1+2!+3!+...+20! 的和
"""
# 定義s用於存放累加總和,t為每個數字階乘
s = 0
t = 1
# 從1到21(不包括21)循環20次,每次循環t都存放著上一次循環階乘結果,s則存放上一次循環的各個階乘之和
for i in range(1,21):
t *= i
s += t
print(s)


輸出結果如下:

五道python練習題,領略編程方法的魅力!

一個正整數,它加上 100 後是一個完全平方數,再加上 168 又是一個完全平方數,請問該數是多少?

我們先用數學的知識分析下這個題目:

五道python練習題,領略編程方法的魅力!

這裡我們可以用程序循環遍歷得到x的值:

"""
一個正整數,它加上 100 後是一個完全平方數,再加上 168 又是一個完全平方數,

請問該數是多少?
"""
for i in range(2,85):
# i要能被168整除
if 168 % i == 0:
# 得到j得值
j = 168 / i
# 根據之前判斷i,j都時偶數,設置i>j是為了防止重複
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
m = (i + j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)


得到結果如下:

五道python練習題,領略編程方法的魅力!

輸入某年某月某日,判斷這一天是這一年的第幾天

判斷這是一年的第幾天,首先要判斷閏年、平年,然後計算天數。這裡我們使用一個列表存放平年每月的天數,當輸入的是平年,則將當月前面的月數天數相加,再加上剩餘天數(即日期);如果是閏年,則將2月的天數改為29,再執行月數的天數相加的操作。

以下為實現代碼:

"""
輸入某年某月某日,判斷這一天是這一年的第幾天?
四年一閏,百年不閏,四百年再閏。其簡單計算方法:
1、能被4整除而不能被100整除。(如2004年就是閏年,1800年不是。)
2、能被400整除。(如2000年是閏年)
"""
day_str = input('請輸入日期(格式:yyyy-mm-dd):')
# 字符串分隔,獲取年月日,eval用於取出最外層引號
year = eval(day_str.split('-')[0])
month = eval(day_str.split('-')[1])
day = eval(day_str.split('-')[2])
# 平年每月的天數
days_per_month = [31,28,31,30,31,30,31,31,30,31,30,31]
# 判斷是否為閏年,是則將2月份天數修改為29
if (year % 400 == 0) and (year % 4 == 0) and (year % 100 != 0):

days_per_month[1] = 29
# 計算總天數
days = sum(days_per_month[:month-1]) + day
print('{}是今年的第{}天'.format(day_str,days))


實現效果:

五道python練習題,領略編程方法的魅力!


分享到:


相關文章: