Python初識函式、閏年判斷函式,水仙花數、學生資訊管理系統、函式實現輸入某年某月某日,判斷這一天是這一年的第幾天
初識函式
要求:
1、函式是什麼? 為什麼要使用函式?
答:如果在開發程式時,需要某塊程式碼多次,但是為了提高編寫的效率以及程式碼的重用,所以把具有獨立功能的程式碼塊組織為一個小模組,這就是函式
為了程式碼重用性
2、定義、呼叫函式的格式分別是什麼?
答:定義函式:
def 函式名():
函式體程式碼
呼叫函式:
函式名()
3、編寫一段程式碼,定義一個函式求1-100之間所有整數的和,並呼叫改函式打印出結果。
答:def my_sum():
"""這是1-100的求和函式"""
sum1 = 0
for i in range(1, 101):
sum1 += i
return sum1
print(my_sum())
4、函式的文件說明有什麼用?
答:可以通過help(函式名),檢視文件說明,對別人使用有可讀性的幫助
5、給第3題中的函式加一個文件說明。
答:def my_sum():
"""這是1-100的求和函式"""
sum1 = 0
for i in range(1, 101):
sum1 += i
return sum1
print(my_sum())
練習題2
函式中的引數、返回值、變數
要求:
1、什麼是函式的引數?為什麼使用引數?
答:函式的引數是形式引數,例如def my_sum(a, b),a、b就是函式my_sum的引數;
為了程式碼重用性,可以根據不同的引數呼叫同一個函式
2、分別說明什麼是“形參”和“實參”。
答:定義函式時小括號中的引數,是用來接收引數用的,稱為 “形參”
呼叫函式時小括號中的引數,是用來傳遞給函式用的,稱為 “實參”
3、編寫一段程式碼,定義一個函式求兩個數之間所有整數的和,在呼叫該函式時傳入這兩個數的具體值。
答:def my_sum(a, b):
"""這是求兩個數之間的所有整數和"""
sum1 = 0
for i in range(a, b):
sum1 += i
return sum1
print(my_sum(10, 50))
4、什麼是返回值?
答:返回值就是呼叫函式後的結果,需要返回給呼叫者,告訴他是什麼結果
5、將第3題中的計算結果作為返回值打印出來。
答:def my_sum(a, b):
"""這是求兩個數之間的所有整數和"""
sum1 = 0
for i in range(a, b):
sum1 += i
return sum1
print(my_sum(10, 50))
6、函式有哪四種類型?
答:(1)無引數無返回值
(2)有引數無返回值
(3)無引數有返回值
(4)有引數有返回值
7、定義一個擁有引數的函式並呼叫,要求把引數打印出來
答:def my_print(str1):
"""這是一個輸出引數的函式"""
print(str1)
my_print("hello")
8、定義一個擁有返回值的引數並呼叫,要求呼叫後,把返回值打印出來
答:def my_return():
"""這是一個返回函式內變數的函式"""
str1 = "python基礎班9期"
return str1
print(my_return())
練習題1
函式的應用
要求:
1、用函式實現一個判斷使用者輸入的年份是否是閏年的程式。(這次就要求用函式來實現了!)
答:def isYears(input_years):
"""這是一個判斷是否是閏年的函式"""
if (input_years % 400 == 0) or ((input_years % 4 == 0) and (input_years % 100 != 0)):
print("%s是閏年" % input_years)
else:
print("%s不是閏年" % input_years)
while True:
input_year = int(input("請輸入一個年份,讓我判斷是否是閏年:"))
isYears(input_year)
提示:
1.能被400整除的年份
2.能被4整除,但是不能被100整除的年份
以上2種方法滿足一種即為閏年
# 舊知識點回顧
2、打印出100-999之間所有的"水仙花數"。("水仙花數"是指一個三位以上的整數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。)
答:def my_Narcissistic():
"""這是一個求100-999的水仙花數"""
for i in range(100, 1000):
str1 = str(i)
if i == int(str1[0]) ** 3 + int(str1[1]) ** 3 + int(str1[2]) ** 3:
print(i)
my_Narcissistic()
習題1
1、課上的學生管理系統儲存學生的資訊是以列表的形式儲存,請思考如何改成字典的形式
例如:
把: [["關羽", "40", "男"],["諸葛亮", "45", "男"]]
改成 [{"name": "關羽", "age":"40", "sex": "男"},{"name": "諸葛亮", "age":"45", "sex": "男"}]
答:info_list = []
userName = "admin"
passWord = "123456"
while True:
# 1、介面
print("--------學生資訊管理器---------")
print("-----1、新增名片-----")
print("-----2、刪除名片-----")
print("-----3、修改名片-----")
print("-----4、查詢名片-----")
print("-----5、查詢所有名片-")
print("-----6、退出迴圈-----")
print("-" * 30)
# 2、輸入,接收使用者輸入的數字,執行相應的操作
command = int(input("請輸入你的操作:"))
# 3、通過判斷使用者輸入的數字是1,還是2,還是3...執行相應操作
if command == 1:
# 新增學生資訊
name = input("請輸入姓名:")
age = input("請輸入年齡:")
sex = input("請輸入性別:")
info_list.append({"name": name, "age": age, "sex": sex})
print("【info】:新增成功")
print(info_list)
elif command == 2:
# 刪除學生資訊
print(info_list)
name = input("刪除:請輸入姓名:")
for i in info_list:
if name in i.values():
del info_list[info_list.index(i)]
print("【info】:刪除成功")
print(info_list)
break
else:
print("【Error】:查無此人")
elif command == 3:
print(info_list)
name = input("修改:請輸入姓名:")
for i in info_list:
if name in i.values():
age = input("請輸入修改後的年齡:")
sex = input("請輸入修改後的性別:")
info_list[info_list.index(i)] = {name, age, sex}
print("【info】:修改成功")
print(info_list)
break
else:
print("【Error】:查無此人")
elif command == 4:
# 查詢學生資訊
name = input("查詢:請輸入查詢姓名:")
for i in info_list:
if name in i.values():
print("%s的資訊:" % name)
for k, v in i.items():
print("%s : %s" % (k, v))
break
else:
print("【Error】:查無此人")
elif command == 5:
# 查詢所有學生資訊
userName_input = input("請輸入你的使用者名稱:")
passWord_input = input("請輸入你的密碼:")
if (userName == userName_input) and (passWord == passWord_input):
print("所有學生資訊如下:")
for i in info_list:
for k, v in i.items():
print("%s : %s" % (k, v))
print("----------------")
else:
print("【Error】:使用者名稱或密碼錯誤")
elif command == 6:
# 退出系統
# print("退出系統成功,謝謝使用")
# break
sign = input("【info】:確定要退出嗎?(yes or no):")
if sign == "yes":
print("退出系統成功,謝謝使用")
break
else:
print("返回到主頁面")
continue
else:
print("【Error】:請輸入1-6之間的整數")
2、用函式實現輸入某年某月某日,判斷這一天是這一年的第幾天?閏年情況也考慮進去(閏年29天,平年28天)
答:
def isLeapYears(year):
"""這是一個判斷是否是閏年的函式"""
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
# 返回1或者True為後面求值判斷
return True
else:
# 返回0或者False為後面求值判斷
return False
def CalculationDay(Ymd_input, year, month, day):
"""
這是一個計算天數的函式
Ymd_input:獲取輸入值
year:年
months:月份
days:日期
"""
# 儲存第幾天的變數
day_sum = 0
# 31天的月份
months_31 = [1, 3, 5, 7, 8, 10, 12]
# 30天的月份
months_30 = [4, 6, 9, 11]
# 在1-month + 1中取值才能包括month
for mon in range(1, month + 1):
# 判斷月份-1是否還在列表中,在的話+31天
if mon-1 in months_31:
day_sum += 31
# 判斷月份-1是否還在列表中,在的話+30天
elif mon-1 in months_30:
day_sum += 30
# 判斷是否是閏年,月份-1是否等於2,是的話+29天
elif isLeapYears(year) and mon - 1 == 2:
day_sum += 29
# 月份-1是否等於2,是的話+28天
elif mon-1 == 2:
day_sum += 28
# 否則不加任何一天
else:
day_sum += 0
# 月份遍歷完後的總天數加上今天幾號,得出結果
day_sum += day
print("%s是%s年的第%s天" % (Ymd_input, year, day_sum))
def input_Ymd():
"""
這是一個輸入函式,獲取輸入值,切片取值,巢狀呼叫CalculationDay()函式
Ymd:輸入值
years:處理後的年
months:處理後的月份
days:處理後的日期
"""
Ymd = input("請輸入年月日,格式為20180118:")
years = int(Ymd[:4])
months = int(Ymd[4:6])
days = int(Ymd[6:])
CalculationDay(Ymd, years, months, days)
while True:
input_Ymd()
例如:
20180118是2018年第18天
提示:
1、以20180118這樣的格式輸入
2、第幾天要看是第幾個月的,可以先求這個月份的前面天數加上今天是多少號,(記得考慮閏年平年)