1. 程式人生 > >Python初識函式、閏年判斷函式,水仙花數、學生資訊管理系統、函式實現輸入某年某月某日,判斷這一天是這一年的第幾天

Python初識函式、閏年判斷函式,水仙花數、學生資訊管理系統、函式實現輸入某年某月某日,判斷這一天是這一年的第幾天

練習題1


初識函式


要求:


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、第幾天要看是第幾個月的,可以先求這個月份的前面天數加上今天是多少號,(記得考慮閏年平年)