目錄
- 實驗1
- 1. 題目描述
- 2.代碼實作:
- 實驗2
- 1. 題目描述
- 2.代碼實作:
- 實驗3
- 1. 題目描述
- 2.代碼實作:
- 實驗4
- 1. 題目描述
- 2.代碼實作:
- 總結
- 1、自定義函式實作輸出所有水仙花數,
- 2、自定義函式實作回文數的判斷
- 3、自定義函式實作判斷三個數是否能構成三角形三條邊
- 4、使用turtle模塊和time模塊實作七段數碼管繪制當前日期,
簡要記錄下本次實驗作業的內容和總結,
實驗1
1. 題目描述
實驗1. 利用自定義函式求所有水仙花數,并用逗號隔開輸出,
所謂水仙花數是一個三位數,其每位上的數字的立方和等于其本身,
如153=13+53+3^3 故153是水仙花數,
2.代碼實作:
def flowerNumer(n):
n1 = sum(int(i) ** 3 for i in list(n))
return n if (int(n) == n1) else 0
if __name__ == '__main__':
num_list = [str(i) for i in range(100, 1000) if flowerNumer(str(i))]
print("所有的水仙花數有:" + ','.join(num_list))
實驗2
1. 題目描述
實驗2. 回文數判斷,
設n是一任意自然數,如果n的各位數字反向排列所得自然數與n相等,則n被稱為回文數,
從鍵盤輸入一個5位數字,請撰寫程式判斷這個數是不是回文數,
如:123454321和9889就是回文數,
2.代碼實作:
import sys
def palindrome_num(n):
# reversed()回傳的是一個物件,需轉換成序列
n1 = ''.join(reversed(n))
s = "是回文數" if str(n) == n1 else "不是回文數"
# n1 = list(reversed(n))
# s = "是回文數" if list(n) == n1 else "不是回文數"
# n1 = tuple(reversed(n))
# s = "是回文數" if tuple(n)==n1 else "不是回文數"
print(n + s)
def isValid(msg):
# 若輸入的不是整數或者不是5位數 # 輸出:“輸入不合法!”,并不回傳任何值
# 法二:
# return 1 if msg.isnumeric() and len(msg) == 5 else "輸入不合法!"
if msg.isnumeric() and len(msg) == 5:
return 1
else: # 若輸入的不是整數或者不是5位數
print("輸入不合法!") # 輸出:“輸入不合法!”,并不回傳任何值
if __name__ == '__main__':
while True:
num = input("請輸入一個5位數:")
if num == '0':
sys.exit()
if isValid(num) is None: # 若回傳值為None,即輸入不合法,重新輸入
continue
else: # 否則呼叫palindrome_num()判斷num是否是回文數
palindrome_num(num)
# 法二:
# if isValid(num) == 1:
# palindrome_num(num)
# else:
# print(isValid(num))
# continue
實驗3
1. 題目描述
實驗3. 三角形判斷,
撰寫函式判斷輸入的3個數字是否能構成三角形的3條邊,
2.代碼實作:
import sys
def isTriangle(num_t):
a, b, c = num_t
if ((a + b) > c) and ((a + c) > b) and ((b + c) > a):
print("{},{},{} 可以構成一個三角形".format(a, b, c))
else:
print("{},{},{} 不可以構成一個三角形".format(a, b, c))
def isValid(n):
try:
a, b, c = n.split()
a = float(a)
b = float(b)
c = float(c)
if a > 0 and b > 0 and c > 0:
return a, b, c # 以元組的形式回傳三邊的值
else:
# 若a,b,c任意一個值小于零,不回傳任何值
print("輸入不合法!")
except ValueError:
# 若a,b,c任意一個值不是整數或小數,不回傳任何值
print("輸入不合法!")
if __name__ == '__main__':
while True:
num = input("請輸入三個數,以空格分隔:")
if num == '':
# 當不輸入任何字符時,退出程式
sys.exit('\n退出程式')
if isValid(num) is None:
# isValid()無回傳值,即輸入不合法,繼續執行
continue
else:
# 否則 將回傳值傳入isTriangle()
isTriangle(isValid(num))
實驗4
1. 題目描述
實驗4. 七段數碼管繪制:通過繪制七段數碼管理解使用函式及其封裝的價值,
2.代碼實作:
import time
from turtle import *
def drawGap(): # 繪制數碼管間隔
penup() # 提起筆移動,不繪制圖形,用于另起一個地方繪制
fd(5) # 向當前畫筆方向移動 5 像素長度
def drawLine(draw): # 繪制單段數碼管
drawGap() # 呼叫drawGap() ,繪制間隔
# turtle.pendown() 移動時繪制圖形,預設時也為繪制
pendown() if draw else penup() # draw不為0繪制圖形,否則另起一個地方
fd(40) # 畫筆向當前方向繪制40像素長的線條
drawGap() # 呼叫drawGap(),繪制間隔
right(90) # 順時針移動90°
def drawDigit(d): # 根據數字規制七段數碼管
drawLine(True) if d in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if d in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if d in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if d in [0, 2, 6, 8] else drawLine(False)
left(90) # 逆時針移動90°
drawLine(True) if d in [0, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if d in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if d in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
left(180) # 逆時針移動180°
penup() # 畫筆另起一個新的點
fd(20) # 沿當前方向移動20像素
def drawDate(date):
pencolor('light coral') # 設定畫筆的顏色為淡珊瑚色,默認初始值為黑色
for i in date:
if not i.isnumeric():
sety(-50)
pencolor('wheat')
if i == '-':
write('年', font = ('微軟雅黑', 24, 'normal'))
pencolor('lightblue') # 設定畫筆的顏色為“lightblue”
fd(45)
elif i == '=':
write('月', font = ('微軟雅黑', 24, 'normal'))
pencolor('lightpink') # 設定畫筆的顏色為“lightpink”
elif i == '+':
write('日', font = ('微軟雅黑', 24, 'normal'))
else:
drawDigit(eval(i))
sety(0)
if __name__ == '__main__':
# 坐標位置(200,200)處繪制一個大小為 800*350像素的畫布
setup(800, 350, 200, 200)
screensize(bg = 'lightyellow')
penup() # 開始繪制
hideturtle() # 繪制完日期,隱藏畫筆的turtle形狀
speed('fastest')
fd(-350)
pensize(5) # 定義畫筆的大小為 5
# 使用strftime 方法將 gmtime() 獲取的當前的日期以“%Y-%m=%d+”的格式賦值給變數a
a = time.strftime("%Y-%m=%d+", time.gmtime())
drawDate(a) # 呼叫自定義函式 drawDate()
done() # 必須是圖形繪制程式的最后一個陳述句
總結
1、自定義函式實作輸出所有水仙花數,
自定義函式floweNumber(),傳入引數為n,用sum()中嵌套元組生成式求各個位數上的數字立方和n1,當滿足原數n == n1時,回傳n,否則回傳0,
在主函式中,呼叫自定義函式floweNumber(),傳入引數i的范圍在[100,1000)內,若回傳值不為0,將數字i添加到串列num_list中,最后用’,’jion(num_list)將所有水仙花數以英文逗號分隔輸出,
注意:傳入引數i需轉換成字串,以便在floweNumber() 中可以使用sum()中嵌套元組生成式的方式逐個計算每位數的立方和,最后添加到串列時也需要將i轉換成字串,因為join()的引數必須是Iterable的,數字不是Iterable的,
2、自定義函式實作回文數的判斷
因為需要輸入,所以自定義一個對輸入值合法的判斷的函式 isValid(),根據題目要求,必須是5位數的數字,那么輸入值不能是非整數,且長度為5,
定義一個用于判斷是否是回文數的函式palindrome_num(),用reversed()反轉傳入引數n,并賦值給新的變數n1,由于reversed()回傳的是一個物件,需轉換成序列,我用join()將其轉換成字串,然后比較str(n) == n1,若相等,字符型s = "是回文數",否則s = "不是回文數",最終輸出 n+s的結果,即傳入值是否是回文數,
在主函式中呼叫isValid()將輸入值num作為引數傳入,若滿足要求,即是5長度為5的整數,回傳1,否則輸出“輸入不合法!”并且不回傳任何值,若判斷呼叫isValid()的值若為None,結束當前回圈,重新執行;否則呼叫自定義函式palindrome_num(),傳入num,
3、自定義函式實作判斷三個數是否能構成三角形三條邊
變數num獲取控制臺輸入的三個數,以空格間隔,定義一個判斷輸入值合法的函式isValid(),num作為引數傳入,變數a,b,c分別對應輸入的三個數,并將三個數轉換成float型別,(input()獲取的是一個字串),判斷a,b,c是否都大于0,是則以元組形式回傳三個數,否則輸出“輸入不合法!”并不回傳值,在進行前面的操作時,可能會出現因為a,b,c任意一個值不是整數或小數,或者控制臺輸入的資料不是3個的情況,需要獲取try: except獲取ValueError例外,輸出提示“輸入不合法!”并不回傳任何值,
在主函式中,首先要對num進行判斷是否為空,若為空則退出程式,然后判斷呼叫isValid()函式的回傳值是否為None,若是,即輸入不合法,終止本次回圈,重新執行;否則呼叫isTriangle() 判斷是三個數否能構成三角形,如果輸入合法,isValid()回傳的是三個數的元組,將回傳值傳入isTriangle()中,再用變數a,b,c分別獲取元組中的三個數,判斷是否滿足任意兩個數之和都大于第三個數,并輸出相應的結論,
4、使用turtle模塊和time模塊實作七段數碼管繪制當前日期,
由于原始碼是老師提供的,我對原始碼稍微進行了一點個性化的修改,主要是對其中的一些函式方法進行了學習,接下來,我就在該功能中學習到的新的知識進行一個簡單的總結,
參考資料:Python繪圖Turtle庫詳解_知行流浪的博客-CSDN博客_python turtle
| 屬性 | 描述 |
|---|---|
| turtle.setup(width = 0.5,height = 0.75[,startx = None,starty = None]) | width,height為整數時,表示像素;為小數時,表示占據電腦螢屏的比例 (startx,starty)表示矩形視窗左上角頂點的位置,如果為空,則視窗位于螢屏中心, |
| turtle.penup() | 提起筆移動,不繪制圖形,用于另起一個地方繪制 |
| turtle.pendown() | 移動時繪制圖形,預設時也為繪制 |
| turtle.hideturtle() | 隱藏畫筆的turtle形狀 |
| turtle.forward(distance) | 向當前畫筆方向移動distance像素長度(或寫成fd) |
| turtle.backward(distance) | 向當前畫筆相反方向移動distance像素長度 |
| turtle.right(degree) | 順時針移動degree° |
| turtle.left(degree) | 逆時針移動degree° |
| turtle.sety() | 將當前y軸移動到指定位置 |
| turtle.write(s [,font=("font-name",font_size,"font_type")]) | 寫文本,s為文本內容,font是字體的引數,font為可選項,font引數也是可選項 pencolor() 無引數傳入,回傳當前畫筆顏色,傳入引數設定畫筆顏色,可以是字串如"green", "red",也可以是RGB 3元組, |
| turtle.pensize(size) | 設定畫筆大小為size個像素 |
| turtle.speed(speed) | 設定畫筆移動速度,在整數[0,10]內,值越大速度越快 |
| turtle.mainloop() 或 turtle.done() |
啟動事件回圈 -呼叫Tkinter的mainloop函式, 必須是烏龜圖形程式中的最后一個陳述句, |
本文來自博客園,作者:{阿銀呀},轉載請注明原文鏈接:https://www.cnblogs.com/XSem/p/16154253.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458372.html
標籤:其他
上一篇:java學習之多執行緒
