python基础入门

 一、环境配置 

Miniconda下载:

https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Windows-x86_64.exe

      (务必勾选“Add Miniconda3 to my PATH environment variable”)

创建环境   conda create -n env_name python=3.10

进入环境   conda activate env_name

退出环境   conda deactivate

二、python基础

Jupyter Notebook 使用

安装  pip install jupyter

打开  jupyter notebook

print输出

·简单的输出

print("hello"+" world")#字符串连接+
print('he said "good"')#单双引号同时使用
print("he said \"let\'s go\"")#单双引号转义:转义符\
print("hello!\nhi!")#换行符\n
#每个print都默认另起一行
#print("hello
#hi")报错
print("""hello
hi
niaho""")
print('''hello
hi
nihao''')#三引号跨行字符串

·format格式化字符串  

取代+号,链接字符串

gpa_dict={"小明":3.251,"小花":3.869,"小李":2.683,"小张":3.685}
for name,gpa in gpa_dict.items():
    print("{0}你好,你的当前绩点为{1:.2f}".format(name,gpa))
    print(f"{name}你好,你的当前绩点为{gpa:.2f}")

#area=...

#print(f"此扇形面积为:{area}")

input输入

输入input()

input函数返回的一律为字符串,必要时要转型

user_weight=float(input("请输入你的体重(单位:kg):"))
user_height=float(input("请输入你的身高(单位m):"))
user_BMI=user_weight /(user_height**2)
print("您的BMI值为"+str(user_BMI))

变量

·命名要求

变量名不能有空格,数字,引号,由文字、数字、下划线组成

下划线命名:字母全部小写,不同单词用下划线分隔user_age

驼峰命名:单词用首字母大写分隔

变量名是大小写敏感的,会看成不同的变量

my_love="1234567890"
print("拨打"+my_love)
my_ex=my_love
my_love ="0987654321"
print("拨打"+my_love)
print("拨打"+my_ex )
print(my_ex +"是前任")
print(my_ex )

·变量类型

整型int,浮点型float
布尔类型bool
a1=True
a2=False
空值类型NoneType
e=None
字符串str
d="hello"
print(len(d))
print(d[0])
print(d[len(d)-1])
type()函数

返回变量类型

print(type(d))
print(type(6))
print(type(6.6))
print(type(a2))
print(type(e))
#运行结果
#<class 'str'>
#<class 'int'>
#<class 'float'>
#<class 'bool'>
#<class 'NoneType'>

计算

·计算

#计算
#3/2==1.5   3//2==1

·数学函数

#数学函数
import math
#math.函数名()
a=math.sin(1)
b=math.log2(8)
print(a)
print(b)
print(2**3)
print(36**(1/2))
print(math.sqrt(36))
a=1
b=9
c=20
delta=b**2-4*a*c
print((-b+math.sqrt(delta))/(2*a))
print(sum([1,-6,23.6,7]))#sum()函数求和

注释

三种方法

·#  

·全选注释Ctrl+/  

·三引号

"""
33fofkdlddnfie此刻MVv哦皮肤v
VSVS吧
"""

列表

列表的创建

shopping_list=[]

增加/移除列表元素,.pop(索引)删除某索引处的元素

shopping_list.append('键盘')
shopping_list.append("键帽")
shopping_list.append("电竞椅")
print(len(shopping_list))
shopping_list.remove("键帽")
shopping_list[1]="硬盘"
print (len(shopping_list))
print (shopping_list[0])
print(shopping_list)
#shopping_list=["键盘","硬盘"]

列表中的函数运用

price=[799,1024,200,800]
print(max(price))
print(min(price))
print(sorted(price))

字典

名={“键”:“值”,...}

键的类型不可变

     字符串,整数,浮点数,布尔类型是不可变的数据类型,可以作为键

     列表属于可变数据类型,就不能作为键 

          #错误示范

  #contacts={[”张伟“,23]:“13700000000” ×
  #          [”张伟“,24]:“13700000001” ×
  #          [”张伟“,25]:“13700000002”}×

     元组   不可变的数据类型,可以作为键

          #元组example_tuple=("键盘","键帽")和 列表 区别在于()[],元组不可以像列表一样通                      过.append进行添加  .remove进行删除

  contacts={("张伟",23):"13700000000",
            ("张伟",24):"13700000001",
            ("张伟",25):"13700000002"}

添加 键

dict={"觉醒年代":"名句一",
      "YYDS":"名句二"}
dict["双减"]="名句三"
dict["破防"]="名句四"
dict['绝绝子']='名句五'
dict["强国有我"]="名句六"

查询字典中的键 :  用 in (返回布尔值)

query=input("请输入您想要查询的流行语")
if query in dict:
    print("您查询的"+query+"含义如下\n"+dict[query])
else:
    print("您查询的流行语暂未收录")
    print("当前本词典收录的词条为:"+str(len(dict))+"条")
print(dict)
#显示{'觉醒年代': '名句一', 'YYDS': '名句二', '双减': '名句三', '破防': '名句四', '绝绝子': '名句五', '强国有我': '名句六'}

删除字典中的键  del dict[“键名”eg:“双减”]

字典中的函数应用

print(dict.keys())#返回所有键
print(dict.values())#返回所有值
print(dict.items())#返回所有键值对

嵌套字典   名={“键”:{“键”:“值”,...},...}   访问名[键][键]

逻辑运算

and   or   not

与C语言中的逻辑运算符相对照 and—&&,or—||,not—!

if:...else:.../elif:...

if条件语句

if 条件:######不要漏掉冒号

执行语句缩进四个空格,只要缩进都归if管。else同理。else不能独立于if单独存在

if   :    elif   :      elif   :    else:

for循环

for循环

列表,字典,字符串中的元素都可以迭代

for 变量名(迭代对象里的每个东西) in 可迭代对象:

     对每个变量做一些事情

for和range结合

range(起始值,结束值,步长)

             步长省略时默认为1,起始值起始值省略默认为0,取不到结束值,只能取到结束值前一值

for num in range(1,10,2):
    print(num)#1\n3\n5\n7\n9
total=0
for i in range(1,101):#最后只能取到100,取不到101
    total=total+i
print(total)#5050

while循环

while 循环条件:

      循环内容

print("我是一个求平均值的程序")
total=0
count=0
user_input=input("请输入数字(完成所有数字输入后,请输入q终止程序):")
while user_input!="q":
    total+=float(user_input)
    count+=1
    user_input=input("请输入数字(完成所有数字输入后,请输入q终止程序):")
if count==0:
    result=0
else:
    result=total/count
print("您输入的数字的平均值为"+str(result))

函数

·自定义函数

普通函数

def 函数名():

     #接下来是一些定义函数的代码

def caculate_secter(central_range,redius):
    secter_area=central_range/360*3.14*redius**2
    print(f"此扇形的面积为:{secter_area}")
    return secter_area
    #没有return语句,默认为return None
secter_area_1=caculate_secter(160,30)
secter_area_2=caculate_secter(60,15)
secter_area_3=caculate_secter(30,16)
高阶函数

f(f(x))  函数名(  参数 ,函数名<不加括号,不加值>)

#格式化函数formatter也可作为高阶函数的参数进行传入

匿名函数

 函数名(   ,lambda 变量名<参数,参数>:返回的东西<直接写,不用写return>)

         #调用时    (匿名函数)(参数,参数...)

·引入模块(python标准库里的模块)

import语句                                                                              (推荐使用)
import statistics #ctrl+点击模块名,可查阅包含的函数
print(statistics.median([19,-5,36]))
print(statistics.mean([19,-5,36]))
from...import...语句
from statistics import median,mean
print(median([19,-5,36]))
print(mean([19,-5,36]))
from...import*                   (若两个模块都引用,且有相同的函数名,易混淆)
from statistics import*
print(median([19,-5,36]))
print(mean([19,-5,36]))

引入第三方模块(python标准库里没有的模块)

需要先下载(pip install)

pypi.org网站可以对第三方库进行搜索

在终端输入pip install 库的名字

下载后,可以用import 库的名字   引用模块,进而用 库.函数  引用函数

常用的Python库  Numpy数值计算  Pandas表格处理  Matplotlib可视化

·类

定义属性(对象的性质),定义方法(对象能做什么事情)

通过class关键字,创建一个类

class CuteCat:

定义(该类的) 属性 的函数   

def __init__(self,cat_name,cat_age,cat_color):#self绑定到对象自身上,自动运行
                                              #通过__init__这个构造方法可以定义对象有哪些属性
        self.name=cat_name#self.name说明是绑定到对象身上的属性,cat_name是普通变量
        self.age=cat_age
        self.color=cat_color

定义(该类的) 方法 的函数

def speak(self):#第一个参数被占用,用来表示对象自身
    print("喵"*self.age)#1岁喵  3岁喵喵喵
def think(self,content):
    print(f"小猫{self.name}在思考{content}")

用所创建的类创建新对象

cat1=CuteCat("Jojo",2,"橙色")#通过class的名字()可以调用__init__来创建新对象,并把对应属性赋值
print(f"小猫{cat1.name}的年龄是{cat1.age}岁,花色是{cat1.color}")
cat1.speak()
cat1.think("现在去干嘛")

例题练习

#定义一个学生类

#1.属性包括学生姓名、学号,以及语数英三科的成绩

#2.能够设置学生某科目的成绩

#3.能打印出该学生的所有科目成绩

class Student:
    def __init__(self,name,student_id):
        self.name=name
        self.student_id=student_id
        self.grades={"语文":0,"数学":0,"英语":0}
    def set_grade(self,course,grade):
        if course in self.grades:
            self.grades[course]=grade
    def print_grades(self):
        print(f"学生{self.name}(学号{self.student_id})的成绩为:")
        for course in self.grades:
            print(f"{course}:{self.grades[course]}分")
zong=Student("小宗",2023001940)
zong.set_grade("语文",90)
zong.set_grade("数学",100)
zong.set_grade("英语",95)
zong.print_grades()

·继承

子类,父类,从属关系,正常情况下,优先执行子类,子类没有再从父类中找

类继承例题练习:

 #人力系统

 #-员工分为两类:全职员工FullTimeEmployee、兼职员工PartTimeEmployee.

 #-全职、兼职都有“姓名 name”、“工号 id”属性

 # 都具备“打印信息 print_info”(打印姓名、工号)方法

 #-全职有“月薪 monthly_salary”属性

 # 兼职有“日薪 daily_salary”属性

 #-全职和兼职都有“计算月薪 caculate_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(FullTimeEmployee, self).__init__(name, id)#super().__init__(name,id)
        self.monthly_salary=monthly_salary
    def  caculate_monthly_pay(self):
        return self.monthly_salary
class PartTimeEmployee(Employee):
    def __init__(self,name,id,daily_salary,work_days):
        super(PartTimeEmployee, self).__init__(name, id)#super().__init__(name,id)
        self.daily_salary=daily_salary
        self.work_days=work_days
    def caculate_monthly_pay(self):
        return self.daily_salary*self.work_days
zhangsan=FullTimeEmployee("张三",1001,6000)
lisi=PartTimeEmployee("李四",1002,230,15)
zhangsan.print_info()
lisi.print_info()
print(f"张三的月薪为:{zhangsan.caculate_monthly_pay()}")
print(f"李四的月薪为:{lisi.caculate_monthly_pay()}")

文件操作

·路径

绝对路径 C:\...\...\

相对路径  用.表示参照文件当前所在目录,用..表示更上一层的父目录,若继续往上走,就用..\.. ,表示当前文件所属目录的父目录的父目录    往下走.\...\

          #.\可以省略

同一目录下的文件,想互相用相对路径找到彼此的话,可以直接用文件名

·操作

"r"

open("第一个参数:文件路径","二:模式,shi字符串<不写默认为r只读模式>",“三:encoding<可选参数>表示编码方式,一般都为utf-8”)open函数会返回一个文件对象

                           #"r"只读模式,"w"写入模式

                           #“r”若找不到文件,就会报FileNotFoundError,提示文件不存在

f=open(".\data.txt","r",encoding="utf-8")#所读文件和代码文件处于同一个文件夹下,相对路径
content=f.read()#返回字符串,读到结尾,第二次读会读空字符串,没有内容
print(content)#f.read(10)表示读1-10过字节的内容
f.close()#关闭文件

#或

with open(".\data.txt","r",encoding="utf-8") as f:#不用单独关文件
    content = f.read()  #缩进
    print(content)   #缩进
    print(f.readline())#不缩进代表关闭文件,无法对文件继续进行操作
    print(f.readline())#每次读一行,共读两行
     #readline会读到文件中每行末尾的换行符,再加上print函数本身就会默认结尾换行,
     #所以两个readline读取的两行中间会多一个空行
    lines=f.readlines()#返回一个列表['      \n','     \n','      \n',...]
    for line in lines:
        print(line)
"w"

"w"写入模式(只写) 

文件不存在,会自动创建命该名的文件          

文件存在,就会先把原本的文件内容清空     

with open(".\poem.txt","w",encoding="utf-8") as f:     
    f.write("关关雎鸠,\n在河之洲。\n窈窕淑女,\n君子好逑。\n")
"a"

"a"附加模式,接着调用"w",即可在原有文件基础上添加内容       

文件不存在,会自动创建命该名的文件

with open(".\poem.txt","a",encoding="utf-8") as f:
    f.write("参差荇菜,\n左右流之。\n窈窕淑女,\n寤寐求之。\n") 

"w""r"都不能用read()读取文件原本的内容

"r+"                                          

文件必须先存在

先读后写,则在文件最后追加内容

先写后读,从顶部开始写,如果顶部有内容会被覆盖(求之不得...参差荇菜...寤寐求之)

with open(".\poem.txt", "r+", encoding="utf-8") as f:    #文件必须先存在
    print(f.read())                                                           
    f.write("求之不得,\n寤寐思服。\n悠哉悠哉,\n辗转反侧。\n")  

捕捉异常try:  except:

从上往下运行,如果第一个except语句捕捉到了对应错误,那么后面的except语句都不会执行

try:

    #有可能产生错误的代码

except ValueError:

    #产生 值错误 时会运行

except(ZeroDivisionError):

    #产生 除零错误 时会运行

except:

    #产生其他错误时运行

else:

    #没有错误时运行

finally:

    #不管发生错误与否都会运行

try:
    #有可能产生错误的代码
    user_weight=(float(input("请输入您的体重(单位:kg)")))
    user_height=(float(input("请输入您的身高(单位:m)")))
    user_BMI=user_weight/user_height **2
except ValueError:
    #产生 值错误 时会运行
    print("输入为不合理数字,请重新运行程序,并输入合理的数字。")
except(ZeroDivisionError):
    #产生 除零错误 时会运行
    print("身高不能为零,请重新运行程序,并输入正确的数字。")
except:
    #产生其他错误时运行
    print("发生了未知错误,请重新运行程序。")
else:
    #没有错误时运行
    print(f"您的BMI值为{user_BMI}")
finally:
    #不管发生错误与否都会运行
    print("程序运行结束")

测试

·assert   布尔表达式 。 值为True,继续运行,值为False,产生AssertionError断言错误,程序终止

·unittest :  常用的python单元测试库

   #把测试代码放到独立文件里//更清晰的划分实现代码和测试代码

   #test_测试代码 

       #import  unittest

       #from 文件名 import 函数名/类名

import unittest
from 实现代码 import my_adder
class TestAdder(unittest.TestCase):#Test开头命名
    #它要当unittest.TestCase的子类,就可使用那些继承自unittest.TestCase的各种测试功能
    #这个类下面可以定义不同的测试用例,每一个测试用例都是类下面的一个方法,名字必须以test_开头
    #unittest这个库会自动搜寻test_开头的方法,并且只把test_开头的当成测试用例
    def test_positive_with_positive(self):
        self.assertEqual(my_adder(5,3),8)
    def test_negative_with_positive(self):
        self.assertEqual(my_adder(-5,3),-2)

   #实现代码

def my_adder(x,y):
    return x+y

 ·unittest.TestCase类的常见的测试方法

方法                                类似于

assertEqual(A,B)           assert A==B

assertTrue(A)                assert A  is True

assertIn(A,B)                 assert A in B

assertNotEqual(A,B)     assert A!=B

assertFalse(A)              assert A  is False

assertNotIn(A,B)           assert A not in B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值