我要成为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的程序员