本教程的知識(shí)點(diǎn)為:計(jì)算機(jī)組成 計(jì)算機(jī)是由什么組成的? 1. 硬件系統(tǒng): 2. 軟件系統(tǒng): 目標(biāo) 運(yùn)算符的分類 1. 算數(shù)運(yùn)算符 2. 賦值運(yùn)算符 3. 復(fù)合賦值運(yùn)算符 判斷語句和循環(huán)語句 if嵌套 1. if嵌套的格式 2. if嵌套的應(yīng)用 if嵌套執(zhí)行流程 容器:字符串鹦马、列表辜御、元組厚宰、字典 字符串介紹 一. 認(rèn)識(shí)字符串 1.1 字符串特征 字符串輸出 容器:字符串谣拣、列表碑韵、元組、字典 列表的相關(guān)操作 1添加元素("增"append, extend, insert)1 append extend 容器:字符串蕊连、列表悬垃、元組、字典 字典的常見操作1 1查看元素1 2修改元素2 3添加元素3 函數(shù)介紹 1什么是函數(shù)1 小總結(jié): 函數(shù)定義和調(diào)用 1定義函數(shù)1 多函數(shù)程序的基本使用流程 1. 使用全局變量 2. 使用函數(shù)的返回值甘苍、參數(shù) 3. 函數(shù)嵌套調(diào)用 函數(shù)返回值(二) 函數(shù)應(yīng)用:學(xué)生管理系統(tǒng) 遞歸函數(shù) 1什么是遞歸函數(shù)1 2遞歸函數(shù)的作用2 看階乘的規(guī)律 文件操作介紹 1什么是文件1 2文件的作用2 文件的打開與關(guān)閉 1打開文件1 面向?qū)ο缶幊探榻B 面向?qū)ο?1. 概述 2. 生活舉例 類和對(duì)象 init()方法 說明: 問題: 有參數(shù)的init()方法 說明: 繼承介紹以及單繼承 1. 現(xiàn)實(shí)中的繼承 2. 程序中的繼承 單繼承:子類只繼承一個(gè)父類 說明: super()的使用 問題: 知識(shí)點(diǎn): 私有權(quán)限 面向?qū)ο笕筇匦裕悍庋b尝蠕、繼承、多態(tài) 靜態(tài)方法和類方法 1. 類方法 2. 靜態(tài)方法 總結(jié) 異常 模塊 1Python中的模塊1 2import2 3from…import3 注意
完整筆記資料代碼:https://gitee.com/yinuo112/Backend/tree/master/Python/嘿馬python基礎(chǔ)入門全體系教程/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
函數(shù)應(yīng)用:學(xué)生管理系統(tǒng)
import time
import os
# 定一個(gè)列表载庭,用來存儲(chǔ)所有的學(xué)生信息(每個(gè)學(xué)生是一個(gè)字典)
info_list = []
def print_menu():
print("---------------------------")
print(" 學(xué)生管理系統(tǒng) V1.0")
print(" 1:添加學(xué)生")
print(" 2:刪除學(xué)生")
print(" 3:修改學(xué)生")
print(" 4:查詢學(xué)生")
print(" 5:顯示所有學(xué)生")
print(" 6:退出系統(tǒng)")
print("---------------------------")
def add_new_info():
"""添加學(xué)生信息"""
global info_list
new_name = input("請(qǐng)輸入姓名:")
new_tel = input("請(qǐng)輸入手機(jī)號(hào):")
new_qq = input("請(qǐng)輸入:")
for temp_info in info_list:
if temp_info['name'] == new_name:
print("此用戶名已經(jīng)被占用,請(qǐng)重新輸入")
return # 如果一個(gè)函數(shù)只有return就相當(dāng)于讓函數(shù)結(jié)束看彼,沒有返回值
# 定義一個(gè)字典,用來存儲(chǔ)用戶的學(xué)生信息(這是一個(gè)字典)
info = {}
# 向字典中添加數(shù)據(jù)
info["name"] = new_name
info["tel"] = new_tel
info["qq"] = new_qq
# 向列表中添加這個(gè)字典
info_list.append(info)
def del_info():
"""刪除學(xué)生信息"""
global info_list
del_num = int(input("請(qǐng)輸入要?jiǎng)h除的序號(hào):"))
if 0 <= del_num < len(info_list):
del_flag = input("你確定要?jiǎng)h除么?yes or no")
if del_flag == "yes":
del info_list[del_num]
else:
print("輸入序號(hào)有誤,請(qǐng)重新輸入")
def modify_info():
"""修改學(xué)生信息"""
global info_list
modify_num = int(input("請(qǐng)輸入要修改的序號(hào):"))
if 0 <= modify_num < len(info_list):
print("你要修改的信息是:")
print("name:%s, tel:%s, :%s" % (info_list[modify_num]['name'],
info_list[modify_num]['tel'],info_list[modify_num]['qq']))
info_list[modify_num]['name'] = input("請(qǐng)輸入新的姓名:")
info_list[modify_num]['tel'] = input("請(qǐng)輸入新的手機(jī)號(hào):")
info_list[modify_num]['qq'] = input("請(qǐng)輸入新:")
else:
print("輸入序號(hào)有誤,請(qǐng)重新輸入")
def search_info():
"""查詢學(xué)生信息"""
search_name = input("請(qǐng)輸入要查詢的學(xué)生姓名:")
for temp_info in info_list:
if temp_info['name'] == search_name:
print("查詢到的信息如下:")
print("name:%s, tel:%s, :%s" % (temp_info['name'],
temp_info['tel'], temp_info['qq']))
break
else:
print("沒有您要找的信息....")
def print_all_info():
"""遍歷學(xué)生信息"""
print("序號(hào)\t姓名\t\t手機(jī)號(hào)\t\t")
i = 0
for temp in info_list:
# temp是一個(gè)字典
print("%d\t%s\t\t%s\t\t%s" % (i, temp['name'], temp['tel'], temp['qq']))
i += 1
def main():
"""用來控制整個(gè)流程"""
while True:
# 1. 打印功能
print_menu()
# 2. 獲取用戶的選擇
num = input("請(qǐng)輸入要進(jìn)行的操作(數(shù)字)")
# 3. 根據(jù)用戶選擇,做相應(yīng)的事情
if num == "1":
# 添加學(xué)生
add_new_info()
elif num == "2":
# 刪除學(xué)生
del_info()
elif num == "3":
# 修改學(xué)生
modify_info()
elif num == "4":
# 查詢學(xué)生
search_info()
elif num == "5":
# 遍歷所有的信息
print_all_info()
elif num == "6":
# 退出系統(tǒng)
exit_flag = input("親,你確定要退出么?~~~~(>_<)~~~~(yes or no) ")
if exit_flag == "yes":
break
else:
print("輸入有誤,請(qǐng)重新輸入......")
input("\n\n\n按回車鍵繼續(xù)....")
os.system("clear") # 調(diào)用Linux命令clear完成清屏
# 程序的開始
main()
遞歸函數(shù)
<1>什么是遞歸函數(shù)1>
通過前面的學(xué)習(xí)知道一個(gè)函數(shù)可以調(diào)用其他函數(shù)囚聚。
如果一個(gè)函數(shù)在內(nèi)部不調(diào)用其它的函數(shù)靖榕,而是自己本身的話,這個(gè)函數(shù)就是遞歸函數(shù)靡挥。
<2>遞歸函數(shù)的作用2>
舉個(gè)例子序矩,我們來計(jì)算階乘 n! = 1 * 2 * 3 * ... * n
解決辦法1:
看階乘的規(guī)律
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
解決辦法2:
原理
總結(jié)
- 函數(shù)內(nèi)部自己調(diào)用自己
- 必須有終止條件(即必須有出口)
1. 匿名函數(shù)
大家來思考一個(gè)問題:
def my_add(a, b):
return a + b
my_add()
my_add 函數(shù)需要2行定義, 能不能簡(jiǎn)化一下定義方式, 一行搞定! 當(dāng)然可以鸯绿, 我們可以把這種函數(shù)寫成一個(gè) 匿名函數(shù).
- 匿名函數(shù)的概念
- 匿名函數(shù)語法格式
- 匿名函數(shù)和普通函數(shù)的區(qū)別
- 匿名函數(shù)的使用場(chǎng)景
1.1 語法格式
定義的函數(shù)沒有名字,這樣的函數(shù)叫做匿名函數(shù).
我們先看下匿名函數(shù)的語法結(jié)構(gòu):
lambda [形參1], [形參2], ... : [單行表達(dá)式] 或 [函數(shù)調(diào)用]
使用匿名函數(shù), 上面的函數(shù)我們就可以定義為單行的函數(shù).
# 不帶參數(shù)
my_fun = lambda : 10 + 20
# 帶參數(shù)
my_add = lambda a, b: a + b
my_add()
注意:
- lambda表達(dá)式的參數(shù)可有可無跋破,函數(shù)的參數(shù)在lambda表達(dá)式中完全適用簸淀。
- lambda表達(dá)式能接收任何數(shù)量的參數(shù)但只能返回一個(gè)表達(dá)式的值。
1.2 和普通函數(shù)的區(qū)別
def my_function(start, end):
my_sum = 0
while start <= end:
my_sum += start
start += 1
return my_sum
- 匿名函數(shù)中不能使用 while 循環(huán)毒返、for 循環(huán), 只能編寫單行的表達(dá)式租幕,或函數(shù)調(diào)用, 普通函數(shù)都可以.
- 匿名函數(shù)中返回結(jié)果不需要使用 return, 表達(dá)式的運(yùn)行結(jié)果就是返回結(jié)果, 普通函數(shù)返回結(jié)果必須 return.
- 匿名函數(shù)中也可以不返回結(jié)果. 例如:
lambda : print('hello world')
1.3 應(yīng)用場(chǎng)景
1.3.1 定義簡(jiǎn)單的單行函數(shù)
def my_function(a, b):
return a + b
使用 lambda 定義格式如下:
my_function = lambda a, b: a + b
1.3.2 作為函數(shù)的參數(shù)進(jìn)行傳遞(重點(diǎn)、難點(diǎn), 擴(kuò)展點(diǎn))
1.3.2.1 為什么函數(shù)要作為另外函數(shù)的參數(shù)?
def my_function1():
a = 100
b = 200
result = a + b
print('result:', result)
def my_function2():
a = 100
b = 200
result = a - b
print('result:', result)
def my_function3():
a = 100
b = 200
result = a * b
print('result:', result)
上面函數(shù)定義的缺點(diǎn)是:
- 函數(shù)名要定義多個(gè), 使用起來不方便. 需要記憶, 那個(gè)函數(shù)完成什么事情.
- 上面函數(shù)只定義了三種計(jì)算方式: a + b拧簸、a -b劲绪、a * b, 如果用戶希望 a 和 b 進(jìn)行除法運(yùn)算, 那么顯然還需要再寫函數(shù).
解決目標(biāo): 1、提高函數(shù)的通用性 2盆赤、減少代碼量
可以通過傳遞給 my_function 一個(gè)函數(shù)來完成.
def my_function(func):
a = 100
b = 200
# 把 cucalate_rule 當(dāng)做函數(shù)來調(diào)用
result = func(a, b)
print('result:', result)
def caculate_rule(a, b):
return a / b
my_function(caculate_rule)
1.3.2.2. 匿名函數(shù)做為函數(shù)參數(shù)
def my_function(func):
a = 100
b = 200
# 把 cucalate_rule 當(dāng)做函數(shù)來調(diào)用
result = func(a, b)
print('result:', result)
def caculate_rule1(a, b):
return a / b
def caculate_rule2(a, b):
return a // b
def caculate_rule3(a, b):
return a % b
my_function(caculate_rule1)
my_function(caculate_rule2)
my_function(caculate_rule3)
我們?yōu)榱苏{(diào)用 my_function 函數(shù)要寫很多規(guī)則, 整個(gè)文件中可能就有很多定義的函數(shù)代碼, 問題是:
- 這些函數(shù)只會(huì)用一次
- 這些函數(shù)也比較簡(jiǎn)單
就沒有必要 py 文件中出現(xiàn)這么多無用的代碼. 如何改進(jìn):
def my_function(func):
a = 100
b = 200
# 把 cucalate_rule 當(dāng)做函數(shù)來調(diào)用
result = func(a, b)
print('result:', result)
my_function(lambda a, b: a / b)
my_function(lambda a, b: a // b)
my_function(lambda a, b: a % b)
1.3.2.3. 總結(jié)
- 函數(shù)可以做為參數(shù)傳遞給另外一個(gè)函數(shù), 可以使得函數(shù)的實(shí)現(xiàn)更加通用.
- 匿名函數(shù)也可以作為參數(shù)傳遞給另外一個(gè)函數(shù), 對(duì)于只需要用到一次函數(shù), 可以通過匿名函數(shù)減少代碼量.
1.3.3 lambda的參數(shù)形式
1.3.3.1.無參數(shù)
fn1 = lambda: 100
print(fn