最近又重新開始學python,淺淺記錄下學習到的東西(也方便自己回顧看)
縮進、空格對于python很重要,一定要注意!
以下代碼是基于pycharm編寫的。
01 輸出
#注釋
# 單行注釋用# ,ctrl+/是單行注釋的快捷鍵
# 多行注銷,全部選中,按住ctrl+/
# 多行注釋,在python是用'''或"""(但不是很推薦)
#輸入輸出 %占位符,后面跟的是變量的類型
# print 函數自帶換行效果
name="張陽"
classinfo="新世紀中學一年三班"
age=17
print("我的名字是%s:來自%s,今年%d"%(name,classinfo,age )) #%S表示字符型,%d表示整數型#基礎輸出語句
print("He said \"Let's go!\"") #\ means 轉義符
print("He said \"Let\'s go!\"") #the same result as the 1st floor
print("Hello! \nHi!") #\n means 另起一行
print("hello!"+" hahaha") #兩個字符組合在一起輸出
#對字符串求長度
s = "Hello world!"
print(len(s))#通過索引獲取單個字符,數組是從0開始計數的
print(s[0])# 布爾類型
b1=True
b2=False
#空值類型
n=None
#type 函數 輸出數據類型
print(type(s))
print(type(b1))
print(type(n))
# 舉例
#BMI計算
user_weight =float(input("請輸入您的體重(單位:kg):")) #輸入的是字符,所以需要轉為float數
user_height =float(input("請輸入您的身高(單位:m):"))
user_BMI=user_weight /(user_height ** 2)
print("您的BMI值為:"+str(user_BMI)) #需要轉換成str字符類型,才可以輸出
02 基礎數值計算
import math
a=-1
b=-2
c=3
x1=(-b+math.sqrt( b**2 -4*a*c))/(2*a)
x2=(-b-math.sqrt( b**2 -4*a*c))/(2*a)
print(x1,x2)
#if-elif 的使用
#多分支,猜拳的小游戲
import random
person=int(input("請出拳:[0:石頭,1:剪刀,2:布]"))
computer=random.randint(0,2) #在0到2之間取隨機整數
if person>2 or person <0 :print("請輸入正確的數字!")
elif (person==0 and computer ==1) or (person==1 and computer ==2) or (person==2 and computer ==0):win=1print("計算機輸出為:%d" %computer )print("恭喜您,獲勝!")
elif person==computer :win=0print("計算機輸出為:%d" % computer)print("平局,再來一次吧!")
else :win=-1print("計算機輸出為:%d" % computer)print("很遺憾,您輸了!")
# 舉例
#打印一個直角三角形
row=1
while row<=7:j=1while j<=row:print("*",end=" ") #這個end保證此print不換行,下面有個print()是為了有個換行j+=1print()row+=1#打印一個等腰三角形
height=int(input("請輸入想要的等腰三角形的高:"))
standard=0
while standard< height:left=height-standardright=height+standardwhile left>=2:print(" ", end=" ")left-=1left = height - standardwhile left<=right :print("*",end=" ")left+=1print()standard+=1#for 循環,適合有限次的循環;適合遍歷集合
tags="我是不是一個人"
for item in tags: #從tags中取值,遍歷進行輸出 tags是字符串類型,本身就是一個字符類型的集合print(item)
#range 此函數可以用來生成一個數據集合列表
range(起始,結束,步長) 步長不可為0,默認步長為1
for data in range(1,101): #起始數字,左邊包含;結束數字,右邊不包含print(data,end ="")if data % 10==0:print()
03 列表
# 在python, 序列就是一組按照順序排列的值,即數據集合
# 有三種內置的序列類型:字符串、列表、元組
# 切片:可以根絕下標,獲取序列對象的任意(部分)數據
name="peter"
print("姓名首字母變成大寫%s"%name.capitalize() ) #首字母變大寫# list: 列表,是一種有序的數據集合。
# 支持增刪改查、數據項可以變化(內存地址不會改變)。
# 用[]表示列表,數據項之間用逗號來分割,數據項可以是任何類型的數據。支持索引和切片來進行操作shopping_list = [] #創建列表
shopping_list.append("鍵盤") #添加字符串
shopping_list.append("鍵帽")
shopping_list.remove("鍵帽") #移出
shopping_list.append("音響")
shopping_list.append("電競椅")print(shopping_list)
print(len(shopping_list)) #輸出長度
print(shopping_list[0]) #輸出排在第一個位置的元素price =[799, 1024, 200, 800]
max_price = max(price)
min_price = min(price)
sorted_price = sorted(price) #排序
print(max_price,min_price )
print(sorted_price)
li=[1,2,3,"您好",8,9,10]
print(type(li))
print(len(li)) #獲取字符串的長度
print(li[0]) #輸出第一個元素
print(li[1:]) #獲取從第二個元素開始到最后的元素
print(li[: : -1]) #-1表示倒序輸出(從右往左輸出)
print(li *2) #表示重復輸出兩次
li.append(["hello","goodbye"]) #末尾新加
li.insert(4,"這是我剛插入的數據") #在第四個位置后,進行信息插入
print("追加之后1",li)
rsDate=list(range(10)) #強制轉換成為list對象
li.extend(rsDate ) #擴展,批量增加
print("追加之后2",li)
li[0]="peter" #對第一個元素進行修改
print("修改之后1",li)
del li[0] #刪除列表中的第一個元素
print("修改之后2",li)
del li[1:3] #批量刪除,刪除第二到第三的所有數據
print("修改之后3",li)
li.remove(0) #移出為0的指定項,只能移除找到的第一個指定元素
print("修改之后4",li)
li.pop(5) #移出指定位置的香,比如這里移出第六個項
print("修改之后5",li)
print(li.index(8)) #查找8所在的位置
04 元組/字典簡單使用
# 元組用(),不可變,添加刪除不可使用
# 元組,是一種不可變的序列,在創建后不可做任何的修改。
# 用()來創建元組,數據項用逗號來分割,可以是任何的類型。
# 當元組中只有一個元素是,要加上逗號,不然解釋器會當做整形來處理
tupleA =() #創建空元組
tupleA =("abcd",89,2.22,"marry",[11,22,33,44]) #對空元組進行賦值
print (tupleA)
#元組的查詢
for item in tupleA : #依舊可以遍歷print(item, end=" ")
print()
print(tupleA [2]) #可以通過索引獲得單個元素
print(tupleA [:: -1]) #反轉
print(tupleA [:: -2]) #隔兩個,取一次反轉
tupleA [4][0] =2223 #可以對元組中的列表元素進行修改,這里是對列表的第一個元素進行修改,但是元組中非列表的其他元素就不可以修改
print(tupleA )#一個字典,k可以進行查詢
# 字典,由鍵值對組成的集合,通常使用鍵來訪問數據,支持對數據的添加、修改、刪除
# 不是序列類型,沒有下標的概念,是一個無需的鍵值組合。用{}來表示字典對象,每個鍵值對用逗號分離
# 鍵,必須是不可以變的類型。值可以是任意的類型。每個鍵是唯一的,如果出現重復的鍵,后者會覆蓋前面的
slang_dict = {"巨星年代":"來了嗎","卷王時代":"啥時候過去?"} #創建了長度為2的詞典
slang_dict["雙減"] ="書本簡單了,考試依舊難"
slang_dict["破防"] = "破了你的防御"
query=input("請輸入你想要查詢的流行語:")
if query in slang_dict : #判斷查的詞是否在字典中print("您查詢的"+ query +"含義如下:")print(slang_dict [query])
else:print("當前本詞典收錄詞條數為:"+ str(len(slang_dict ))+ "條。")# 字典再舉例
dictA={} #創建一個空字典
dictA ["name"]="揚不養" #添加字典數據。key:name。value:揚不養
print(dictA )
dictA ["age"]=103
print(dictA )
dictB={"pro":"藝術","school":"家里蹲大學"} #也可以在新建字典的時候,之間添加字典數據
print(dictB )
print(len(dictB )) #以逗號分割為一項,故上面的dictB只有兩項
print(dictA ["name"]) #取鍵值
dictA["name"]="王不枉" #修改鍵對應的值
print(dictA )
print(dictA .keys()) #打印 所有的鍵
print(dictA .values()) #打印所有的值
05 函數使用
#定義函數
def calculate_sector_1(central_angle, radius):#接下來是一些定義函數的代碼sector_area =central_angle /360 *3.14* radius **2print(f"此扇形面積為:{sector_area}")calculate_sector_1(160,30)def calculate_bmi (weight, height):bmi=float(weight)/float(height) **2if bmi<=18.5:label="偏瘦"elif bmi <=25 :label = "正常"elif bmi<=30:label = "偏胖"else:label = "肥胖"print("您的BMI分類為:"+ label)print("您的BMI為:"+ str(bmi))return bmicalculate_bmi(70,1.8)
#函數使用練習2
#定義一個學生類
#能夠設置學生某科目的成績
#能夠打印出該學生的所有科目成績class Student:def __init__(self, name, student_id): #init這是固定格式self.name = nameself.student_id = student_idself.grades = {"語文": 0, "數學": 0, "英文": 0}def set_grade(self, course,grade): #self是固定,必須有的if course in self.grades:self.grades[course]=gradedef print_grades(self):print(f"學生{self.name}(學號: {self.student_id})的成績為:")for course in self.grades:print(f"{course}: {self.grades[course]}分")chen = Student("小陳","100663")
zeng = Student ("小曾","100633")
print(chen.name)
zeng.set_grade("數學",95)
zeng.set_grade("語文",94)
zeng.set_grade("英文",93)
print(zeng.grades )
zeng.print_grades()
# 函數使用練習3:可變函數
# 可變參數:當參數個數不確定時使用,比較靈活
# 計算累加和
# 可變參數*接收的是元組類型,**接收的是字典類型
def getComputer(* args) :print(args)result=0length=int(len(args))while length>0 :result=result+args[length-1]length-=1"""另一種求和方式for item in args:result+=item"""print(result)getComputer(1,2,3,4,5)# 關鍵字可變參數,用**來定義
# 在函數體內,參數關鍵字是一個字典類型,key是一個字符串
def keyFunc(**kwargs) :print(kwargs )
dictC={"name":"Pipi","age":32}
# keyFunc(dictC) #這樣是不可以的
keyFunc( **dictC) #這樣是可以的
keyFunc(name="peter",age=22) # 這樣是可以的,是以鍵值對的方式進行傳遞
# 函數練習使用4
# 寫函數,接收n個數字,求這些參數數字的和;
def adder(*number):sum=0for item in number :sum+=itemreturn sum
print(adder(1,2,3,4,5,8))
# 寫函數,找出傳入列表或元組的奇數位對應的元素,并返回一個新的列表;
def process(con):listNew=[]index=1for i in con :if index %2 ==1: #判斷奇數位listNew.append(i)index+=1return listNew
print(process([1,2,3,4,4,5,6,7,8,9,10,11]) )
# 寫函數,檢查傳入字典的每一個value的長度,如果大于2,那么保留前兩個長度的內容,并將新內容返回給調用者。PS:字典中的value只能是字符串或列表
def dictD (dictparms):result={}for key, value in dictparms .items(): #返回的是字典的數據項if int(len(value)) >2:result[key]=value[:2] #向字典去添加數據else:result[key]=valuereturn result
dictDD={"name":"bibi","age":"22","hobby":"baseball","saygoodbye":["no","hay","bye",5,6]}
# 注意上面的22需要加",因為不加就是int型,int不可以用len
print(dictD(dictDD ) )# 匿名函數,沒有名字的函數,后面自帶的表達式只有一個,只能實現簡單的功能
# 語法結構: lambda 參數1、參數2、參數3:表達式
M=lambda x,y:x+y #通過變量去調用匿名函數
print(M(22,26))
06 類的使用
# 面向對象編程 OOP (object oriented programming)
# 面向過程,是按照解決問題的步驟開始寫的
# 類:是一組具有相同或相似屬性、特征、行為的一系列對象的集合
# 對象:類的實例化、具象化
#
class Person:name="小明" #類屬性,表示直接歸屬于類的屬性age=18def __init__(self,id): #實例屬性,可理解為默認的初始值self.id="A111111"def eat(self): #實例方法,在類的內部,使用def關鍵字來定義,第一個參數默認是selfprint("大口大口吃飯")def run(self):print("一點也跑不動,不喜歡長跑")xm=Person (333) #創建一個對象,333指的是id
xm.eat() #調用函數
xm.run()
print("{}的年齡是:{}".format(xm.name,xm.age))class People:def eat(self):print("需要吃一日三餐")sam=People ()
sam.eat()
sam.age=22 #添加的是實例屬性
sam.sex="male"# self和對象指向同一個內存地址,可以認為self就是對象的引用
class Human:def eat(self): #實例方法print(self)
xw=Human()
xw.eat()# 析構方法 相當于所有程序用一遍后,最后使用del()自動刪除,釋放內存空間
class Animal:def __init__(self,name ):self.name=nameprint("這是析構方法的初始化")def __del__(self): #主要的應用就是操作對象的釋放,一旦釋放完畢,對象便不能再使用print("這是析構方法")cat=Animal ("貍花")
# python中展現面向對象的三大特征:封裝、繼承、多態
# 封裝:指的是把內容封裝到某個地方,便于后面的使用。
# 繼承:子可以繼承父的內容。
class Animal2:def eat(self):print("can eat")def drink(self):print(" can drink")
class Dog(Animal2 ): #繼承animal2的內容def sound(self):print("汪汪")
class Cat(Animal2 ):def sound(self):print("喵喵")
D1=Dog()
D1.drink()
C1=Cat()# 多繼承,一個子類可以從多個父類進行繼承
class monster(Dog, Cat):pass
m1=monster()
m1.sound()# 多態。多態必須發生在父類和子類之間,子類重寫多態的方法
class Animal3: #父類def say_who(self):print("I am an animal.")
class Duck(Animal3 ):def say_who(self): #子類和父類這個名字相同時,才算是重寫print("I am a duck.")pass
duck1=Duck()
duck1.say_who()
#類繼承練習:人力系統
#員工分為兩類,有相同屬性,有不同屬性
#子類優先調用自己的,自己沒有時,才向父類調用class Employee:def __init__(self, name, id):self.name = nameself.id = iddef print_info(self):print(f"員工名字: {self.name}, 工號:{self.id}")class FullTimeEmployee(Employee):def __init__(self, name, id, monthly_salary):super().__init__(name, id) #用super表示的父類self.monthly_salary = monthly_salarydef calculate_monthly_pay(self):return self.monthly_salaryclass PartTimeEmployee(Employee):def __init__(self, name, id, daily_salary, work_days):super().__init__(name, id) #用super表示的父類self.daily_salary = daily_salaryself.work_days = work_daysdef calculate_monthly_pay(self):return self.daily_salary * self.work_dayszhangsan = FullTimeEmployee("張三","1111",8000)
lisi=PartTimeEmployee ("李四","1110",300,15)
zhangsan.print_info()
lisi.print_info()
print(zhangsan.calculate_monthly_pay())
print(lisi.calculate_monthly_pay() )
07 文件路徑學習
#讀文件
f=open("./read.txt","r",encoding= "utf-8") #./表示相對路徑(常用于在同一路徑下時),r表示只讀,encoding表示編碼方式
content=f.read()
print(content)
f.close() #關掉對文件的操作
#寫文件
with open("./poem.txt","w",encoding="utf-8") as f1:f1.write("我欲乘風歸去,\n") #沒有換行符,這里就是不換行接著寫f1.write("又恐瓊樓玉宇,\n")f1.write("高處不勝寒。\n")
#在前面內容的基礎上繼續加話,但是如果還是用w模式則會將前面內容清空,所以采用a模式,即添加
with open("./poem.txt","a",encoding="utf-8") as f1:f1.write("起舞弄清影,\n")f1.write("何似在人間,")
08 異常捕捉
#try-except 是從上往下運行,如果前面的except已經捕捉到了錯誤,下面的就不會再執行了,類比if-else
try:user_weight =float(input("請輸入您的體重(單位:kg):")) #輸入的是字符,所以需要轉為float數user_height =float(input("請輸入您的身高(單位:m):"))user_BMI=user_weight /(user_height ** 2)
except ValueError: #如果輸入一個非數字的字符,程序就會報錯,也就是ValueErrorprint("輸入不為合理數字,請重新運行程序,并輸入正確的數字。")
except ZeroDivisionError : #即除零錯誤print("身高不能為零,請重新運行程序,并輸入正確的數字。")
except: #可以捕捉發生的任意錯誤(常考慮于錯誤情況考慮不全時)print("發生了未知的錯誤,請重新運行程序")
else: #沒有錯誤時,會運行print("您的BMI值為:" + str(user_BMI)) # 需要轉換成str字符類型,才可以輸出
finally: #無論錯誤與否,都會被執行print("程序結束運行。")