我要成为python高手
我要成为python高手
安装python
python的安装,非常简单,这一步跳过,B站上很多大佬讲过。
声明:本次笔记参考B站大佬林粒粒呀 及菜鸟教程
print函数
初学python,这是我们认识的第一个函数,它可以很好的打印出字符串
print('我要成为python高手!')
print("hello! \n hi")
python的变量
python的变量是用来储存和代值的,它得有个名字,然后对它进行赋值,python是从上到下执行,所以需要先对变量赋值,然后才可以正常使用。变量命一般用数字,字母,下划线组成,一个好的项目文档,里面会有介绍如何取变量名。
a = 74
b = 56
c = a + b
print(c)
eating = "晚饭次什么呢?"
eating_not = "窝不想次"
eating_do = "窝要次"
eating = eating_do
print(eating + "苦瓜汁")
print(eating + "南瓜汁")
print(eating + "香蕉汁")
#窝要次苦瓜汁
#窝要次南瓜汁
#窝要次香蕉汁
python的数学运算
说到python数学的运算,加减乘除就不介绍了,最重要的库就是math啦,极大减小了我们的操作性,我们可以通过math的官方文档来使用它
import math
result = math.log2(8)
print(result)
#3.0
#经典求根公式
x1 = print((-b + math.sqrt(b**2-4*a*c)) / (2*a*c))
x2 = print((-b - math.sqrt(b**2-4*a*c)) / (2*a*c))
python的数据类型----摘抄菜鸟教程
Number(数字)-------------Python3 支持 int、float、bool、complex(复数)。
String(字符串)--------------Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
bool(布尔类型)------------布尔类型即 True 或 False。True 和 False 都是关键字,表示布尔值。
List(列表)-----------------List(列表) 是 Python 中使用最频繁的数据类型。
Tuple(元组)---------------元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
Set(集合)---------------Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。
Dictionary(字典)-----------字典(dictionary)是Python中另一个非常有用的内置数据类型。
#对字符串求长度
a = "我要成为python高手"
print(len(a))
#索引获取字符,0开始
print(a[0])
#布尔类型
a1 = True
a2 = False
#空值
a3 = None
#type
print(type(a1))
input函数
input是python里面一个常见的获取输入的函数,它可以获取的用户的数据,它可以返回输入的结果(字符串)
age = int(input("您的年龄是:"))
age_10year = age + 10
print("您10年后的年龄是" + str(age_10year))
python的条件判断
1.条件判断
if [条件]: 布尔值判断真假
[执行条件]
else [条件]:
[执行条件]
肚子饿指数 = int(input("输入当前的指数:"))
if 肚子饿指数 <= 50:
print("我要喝苦瓜汁,谢谢")
else:
print("谢谢,我还不饿")
2.嵌套条件语句
if [条件1]:
if [条件2]:
[语句A]
else:
[条件B]
else:
[条件C]
elif嵌套
if [条件1]:
[语句A]
elif [条件2]:
[语句B]
elif [条件3]:
[语句C]
else:
[语句D]
逻辑运算
处了嵌套。有时候还可以使用逻辑运算
if (wddzel > 10 and nddzel > 11 and taddzel > 15 and dajiddzel >20):
print("次饭")
else:
print("不饿呢")
python列表
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型,列表是可变的,增加或者修改
list_1 = ["苦瓜","鸡蛋"]
list_1.append("西红柿")
list_1.remove("鸡蛋")
print(list_1)
print(len(list_1))
#列表2
list_2 = [87,89,54,74,0]
# print(min(list_2))
list_2_min = min(list_2)
list_2_max = max(list_2)
list_2_sorted = sorted(list_2)
print(list_2_min)
print(list_2_sorted)
python字典
字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中
dIct_1 = {key1 : value1, key2 : value2 }
#增
dict_1[key3]=value3
#删
dict_1[key1]=value1
print(dict_1)
#查询
dIct_1 = {key1 : value1, key2 : value2 }
chaxun = input("你要查什么:")
if chaxun in dict_1:
print("我在这里!"+ chaxun )
print(dict_1[chaxun])
else:
print("找不到呢")
print("现在有" + str(len(dict_1))+"个值")
for循环
重复执行语句
for 变量名 in 可迭代对象
#对变量操作
list = [66,54,74,23,45,68,12,13]
for vale in list:
if vale > 10:
print(vale)
#结合range函数使用
toal = 0
for i in range(1,101):
toal = toal + i
print(toal)
while循环
while 条件A:
行动B
count = 0
while count < 60:
print("oi")
count += 1
list1 = ["兄","弟","你","好","香"]
i = 0
while i < len(list1):
print(list1[i])
i +=1
现在我们尝试用while来实现对输入的数字求平均值
total = 0
count = 0
user_vale = input("请输入:")
while user_vale != "q":
num = float(user_vale)
# total = num + total
total += num
count += 1
user_vale = input("请输入:")
if count == 0:
result = 0
else:
result = total / count
print(result)
格式化字符串
format方法,指定替换一些内容
DRY原则----初识函数
Don't Repeat Yourself 写代码时尽量去避免一些重复的事,函数可以很好的把我们避免一些重复的事,自定义函数使用def:格式如下
def sanxing():
cental_angle_1 = 160
radius_1 = 30
sector_area_1 = cental_angle_1 / 360 * 3.14 * radius_1 **2
print(f'这个扇形的面积是:{sector_area_1}')
#sanxing()
#改进,传参,
def sanxing(cental_angle_1, radius_1):
# cental_angle_1 = 160
# radius_1 = 30
sector_area_1 = cental_angle_1 / 360 * 3.14 * radius_1 **2
print(f'这个扇形的面积是:{sector_area_1}')
sanxing(60,80)
函数需要调用才会被执行。上面的代码有一些小小的问题,现在我们需要了解一下什么是作用域
作用域:我们在函数里面定义的变量都是局部变量,在函数之外无法访问,像这样
def fun():
a = 5
print(a)
print(a)
#NameError: name 'a' is not defined
现在return的作用就体现了,它会在函数调用后,返回我们想要它返回的东西
def fun():
a = 5
print(a)
return(a)
print(fun())
return 的默认返回值是空值,来一个小小的练习,BMI计算器
def BMI(weight,height):
BMI = weight / height **2
if BMI <= 18.5:
category = "偏瘦"
elif 18.5 <= BMI <= 25:
category = "正常"
elif BMI <= 30:
category = "偏胖"
else:
category = "肥胖"
print(f'您的分类为:{category}')
return BMI
reselt=BMI(21,80)
print(reselt)
模块的使用
python大佬们提供了大量的第三方库,我们可以直接拉来用
pip install 模块
引入模块的三种方法
import math | form ... import .... | form...import *
我们也可以去python的标准库找,以及pypi.org这个网站
面向对象编程---oop(菜鸟教程摘抄)
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。
如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。
接下来我们先来简单的了解下面向对象的一些基本特征。
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
现在我们来尝试实例化对象
class xts:
def __init__(self,age,name,sex):
self.age = age
self.name = name
self.sex = sex
xts1 = xts(20,"xts","nv")
print(xts1.name)
print(xts1.age)
print(xts1.sex)
定义对象的方法,方法可以表示对象可以做那些事,现在有一个这样的需求
#定义一个学生类
#学生名字 学号 成绩
#能够打印三科成绩
class student:
def __init__(self,name,student_id):
self.name = name
self.studentd_id = student_id
self.grades = {"语文": 0,"数学":0,"英语":0}
#调用方法
def speak(self,course,grade):
if course in self.grades:
self.grades[course] = grade
def print_grades(self):
print(f'学生{self.name} 学号{self.studentd_id} 的成绩是:')
for course in self.grades:
print(f'{course}:{self.grades[course]}分')
#实例化对象
xts = student("小天使","10001")
xts.speak("语文",100)
xts.speak("数学",100)
xts.speak("英语",100)
# print(xts.name,xts.studentd_id,xts.grades)
print(xts.grades)
xts.print_grades()
类的继承
Python中类的继承也就是一个类继承另一个类的话,便可以拥有所继承类的所有属性和方法,此时使用起来不仅方便且节省代码量。就像遗传的那样,儿子会继承父亲的一些特征
class Mammal:
def __init__(self,name,sex):
self.name = name
self.sex = sex
self.num_eye = 2
def breathe(self):
print(self.name + "会呼吸")
def eat(self):
print(self.name + "要干饭")
#子类
class Human(Mammal):
def read(self):
print(self.name + "会看书")
#子类2 猫猫
class cat(Mammal):
def read(self):
print(self.name + "在撒娇")
xts = Human("小天使","女")
print(xts.name,xts.sex)
xts.breathe()
xts.read()
maomao = cat("喵喵","母")
print(maomao .name,maomao.sex)
maomao.breathe()
maomao.read()
#super方法
# 父类
class Mammal:
def __init__(self,name,sex):
self.name = name
self.sex = sex
self.num_eye = 2
def breathe(self):
print(self.name + "会呼吸")
def eat(self):
print(self.name + "要干饭")
#子类 引入super方法
class Human(Mammal):
def __init__(self, name, sex):
super().__init__(name, sex)
self.has_tail = False
def read(self):
print(self.name + "会看书")
#子类2 猫猫
class cat(Mammal):
def __init__(self, name, sex):
super().__init__(name, sex)
self.has_tail = False
def read(self):
print(self.name + "在撒娇")
xts = Human("小天使","女")
print(xts.name,xts.sex)
xts.breathe()
xts.read()
maomao = cat("喵喵","母")
print(maomao .name,maomao.sex)
maomao.breathe()
maomao.read()
做个小练习,巩固一下吧
#类的继承练习:人力系统
#员工分为两类 全职员工 FulltimeEmployee 兼职员工 ParttimeEmployee
#全职和兼职都要姓名 工号等属性
#都具备打印信息 print_info (打印姓名 工号的方法)
#全职有'月薪' calculate_monthly_pay属性
#兼职有日薪daily_salary 每月工作天数 work_days 属性
#全职和兼职都有计算月薪 calculate_monthly_pay的方法,但具体计算方法不一样
class Employee:
def __init__(self,name,id):
self.name = name
self.id = id
def print_info(self):
print(f'员工{self.name },工号是{self.id}')
#全职员工
class FulltimeEmployee(Employee):
def __init__(self, name, id,monthly_salary):
super().__init__(name, id)
self.monthly_salary = monthly_salary
def calculate_monthly_pay(self):
return self.monthly_salary
#兼职员工
class ParttimeEmployee(Employee):
def __init__(self, name, id,daily_salary,workdays):
super().__init__(name, id)
self.daily_salary = daily_salary
self.workdays = workdays
def calculate_monthly_pay(self):
return self.daily_salary * self.workdays
xts = FulltimeEmployee("小天使","10001","3K")
xxts = ParttimeEmployee("小小天使","10002",8,23)
result=xxts.calculate_monthly_pay()
print(result)
文件操作
目录结构就像树根一样,/表示根目录,一切的文件和目录都在根目录下面,windowns的每个磁盘都有根目录。
绝对路径:从根目录出发,以/开头 C:\hmoe\data\a.py
相对路径:从参照目录出发 data\a.py
很多编辑器可以帮我们复制路径,所以不用担心
现在我们来用python来操作文件。
#读文件的方法
f = open('./data.txt',"r",encoding="utf-8")
print(f.read())
#read会占用大量的内存 传入字节可以避免这个问题
print(f.read(10))
#readline 只会读一行的内容
line = f.readline() #读第一行
while line != "": #判断当前行是否为空
print(line) #不为空则打印下一行
line = f.readline() #读取下一行
# readlines的用法 结合for循环使用
f = open('./data.txt',"r",encoding="utf-8")
lines = f.readlines() #把每行内容都存储在列表里
for line in lines:
print(line)
#读完要记得关闭文件
f.close()
#法2
with open("文件路径") as f:
print(f.read)
上面学习了读文件,那么接下来怎么写呢?非常简单。
#写文件
#和读文件差不多 也是要先打开
#如果已经存在了该文件,那么用W模式会把原文件清空
with open("文件路径","w",encoding="utf-8") as f:
f.write("fgdhjubdshj!\n")
#a模式表示追加内容
with open("文件路径","a",encoding="utf-8") as f:
f.write("hello world!")
#读写模式
with open("文件路径","r+a",encoding="utf-8") as f:
f.write("hello world!")
# 实践时间
with open("./paem.txt","w",encoding="utf-8") as f:
f.write("我是小天使\n")
f.write("成功地当上了客服\n")
with open("./paem.txt","a",encoding="utf-8") as f:
f.write("工资1800\n")
f.write("每天笑哈哈\n")
来到这里。你已经非常棒了,接下来我们学习python的异常处理,避免程序炸了
# #异常的类型,列如
number_list = [56,23,-5,96]
# number_list[4] #IndexError: list index out of range 索引错误
print(56 / 0) #ZeroDivisionError: division by zero 除零错误
f = open("./ht,txt","r") #FileNotFoundError: [Errno 2] No such file or directory: './ht,txt' 找不到文件错误
i = 'jfddf' * 'fkhjdl'
print(i) #TypeError: can't multiply sequence by non-int of type 'str' 类型错误
#异常类型非常的多,写的越多,错的越多,趁早放弃才是正途,哈哈哈,开个玩笑
#平时就应该多测试,把bug找出来,如果是客户的问题,那我们可以预判一波
try: #可能出现异常的代码
o = float(input("需要一个数字:"))
except ValueError:
print("您输入的不是数字,请重新运行程序")
except: #把所有的问题都指向一个问题
print("发生了未知的错误,请重新运行")
finally: #不管错误是否发生,都会运行
print("程序结束运行")
#测试是非常重要的
bug是什么?让程序跑不起来的东西,只要写代码,就不存在不写bug的程序员