Day0:Python快速入门

先导篇 | 为什么做这个教程,UP主是闲得发慌吗_哔哩哔哩_bilibili

Python3 模块 | 菜鸟教程

一、基础知识

1、解释型语言

  • python是解释型语言,因此读一行执行一行,速度较慢

2、变量命名规则

  • 变量名是大小写敏感的
  • 变量名只能包含字母、数字、下划线,且不以数字开头
  • 下划线命名法:字母全部小写,不同单词用下划线隔开

3、注释

  • 单行注释:#
  • 多行注释:‘’‘注释块’‘’
  • 快捷键:ctrl+/

4、引入模块

#引入模块中所有函数
import math
print(math.pi)
print(math.sin(math.pi*2))

#引入模块中特定函数
from math import sin, pi
print(pi)
print(sin(pi*2))

#在windows中按住ctrl键点击函数名可查看函数定义

5、数据类型

  • type函数:返回某个对象的数据类型

1)字符串 str

a = "hello"       #字符串用单引号或双引号包围
print(a[0])       #用索引指定字符串某位字符,即h
print("hello"[0]) #用索引指定字符串某位字符,即h
print(len(a))     #用len函数求字符串长度,即5

2)整数 int

b = 6

3)浮点数 float

c = 6.6

4)布尔类型 bool

d1 = True
d2 = False

5)空值类型 NoneType

e = None

6)列表

mix_list = ["hello", 66.6, True] #列表可以存放不同类型的数据

num_list = [1, 13, -7, 2] #列表可用方法改变
num_list.append(96)       #用append方法向列表中加入元素,列表变为[1,13,-7,2,96]
num_list.remove(-7)       #用remove方法删除列表中某元素,列表变为[1,13,2,96]
num_list[0] = -3          #用索引指定某元素,并给它重新赋值,列表变为[-3,13,2,96]

print(len(num_list))      #用len函数返回列表中元素数量,即4
print(max(num_list))      #用max函数返回列表中的最大值,即96
print(min(num_list))      #用min函数返回列表中的最小值,即-3
print(sorted(num_list))   #用sorted函数返回从小到大排序好的列表,即[-3,2,13.96]

7)元组

name_tuple = ("Simon",1) #元组是不可变数据类型,不能添加、删除元素

8)字典

#键与值用':'隔开,键值对用','隔开
#键是不可变数据类型,列表不能作为键
contact_dict = {"Simon":"000","Lily":"001"} #字典可变
contact_dict["Anna"] = "002"   #添加键值对/给某键重新赋值
del contact_dict["Simon"]      #删除键值对
print(contact_dict.keys())   #返回所有键,即dict_keys(['Lily', 'Anna'])
print(contact_dict.values()) #返回所有值,即dict_values(['001', '002'])
print(contact_dict.items())  #返回所有键值对,即dict_items([('Lily', '001'), ('Anna', '002')])

print("Simon" in contact_dict) #返回某个键是否在字典中,即False
print(contact_dict["Lily"])    #返回某个键的值,即001
print(len(contact_dict))       #用len函数返回列表中元素数量,即2

二、基本语法

1、输入

k = input("please input your age:") #输入变量的默认类型是字符串
use_age = int(k) #将变量k的类型转换为int

2、输出

1)转义符

print("打印'let\'s go'"#\

2)换行符

print("hello\nLiMing") #\n

3)多行打印

print('''Hello
LiMing''')

4)格式化字符串

name = '老林'
year = '龙'
print(f'祝{name}{year}年大吉!') #print(f'字符串{变量}字符串')

5)格式化数字

gpa = {'小李': 3.257, '小肖': 2.643}
for name, gpa in gpa.items():
    print(f'{name}你好,你的当前绩点为{gpa:.2f}') #用“:.nf”来指定浮点数的小数位数

3、条件

#多条件判断
weight = float(input("请输入您的体重(单位:Kg):"))
height = float(input("请输入您的身高(单位:m):"))
BMI = weight / (height**2)
if BMI <= 18.5:
		print("偏瘦")
elif BMI <= 25:
		print("正常")
else:
		print("偏胖")
#逻辑运算:and, or, not
if (housework_count > 10 and shopping_count > 4 and not has_been_angry)
		print("you will receive gift")
else:
		print("you will get nothing")

4、循环

1)for循环

#字典名.items()在for循环时,变量会被依次赋值为键与值组成的各元组
#元组的第一个元素会赋值给staff_id,元组的第二个元素会赋值给temp
temp_dict = {"001":36.4,"002":38.2,"003":36.6}
for staff_id,temp in temp_dict.items():
		if temp>= 38:
				print(staff_id)
#range(起始值,结束值)在for循环时,变量会被依次赋值为从 起始值 到 结束值-1 的数字
#range(结束值)在for循环时,变量会被依次赋值为从 0 到 结束值-1 的数字
for i in range(5, 10): #i会被依次赋值为从5到9的数字
		print(i)           #5 6 7 8 9

2)while循环

char_list = ["你", "好", "吗", "兄", "弟"]
#第一种方法:for循环
for char in char_list:
		print char
#第二种方法:for循环+range
for i in range(len(char_list)):
		print(char_list[i])
#第三种方法:while循环
i = 0
while i < len(char_list):
		print(char_list[i])
		i = i + 1
#while循环更适合于循环次数未知的情况
#例:求用户输入数字的平均值
user_input = input("请输入任意数量的数字,最后输入q表示所有数字输入完成:")
total = 0
count = 0
average = 0
while user_input != 'q':
    total += float(user_input)
    count += 1
    user_input = input("请输入任意数量的数字,最后输入q表示所有数字输入完成:")
if count != 0:
    average = total / count
print("您输入的数字平均值为:" + str(average))

5、函数

# 例:一个计算BMI的函数
def calculate_BMI(weight, height): #用def定义函数
    BMI = weight / (height ** 2)
    if BMI <= 18.5:
        category = '偏瘦'
    elif BMI <= 25:
        category = '偏瘦'
    else:
        category = '偏瘦'
    print('您的BMI分类为'+category)
    return BMI
weight = float(input("请输入您的体重(单位:Kg):"))
height = float(input("请输入您的身高(单位:m):"))
result = calculate_BMI(weight, height)
print(result)

三、面向对象

1、类与对象

1)类

  • 类:创建对象的模板,定义了对象的属性和方法
    • 属性:放在类中的变量
    • 方法:放在类中的函数
  • Pascal命名法:用大写的首字母来分割单词
class CutCat:
		def __init__(self, cat_name, cat_age): #构造函数是特殊的方法,用来定义实例对象的属性
				self.name = cat_name  #self参数用于表示对象自身,用来把属性的值绑定在实例对象上
				self.age = cat_age
		def think(self, content): #方法中的self参数用于调用或修改对象的属性
				print(f'小猫{self.name}在思考{content}')

2)对象

  • 对象:类的实例,对象拥有的具体属性可以不同
cat1 = CuteCat('Jojo', 2) #调用类创建对象,构造函数会自动运行,self参数不需要手动传入
print(cat1.name)          #获取对象的属性
cat1.think('今晚吃什么')   #对对象调用方法

3)示例

class Student:
    def __init__(self, name, student_id):
        self.name = name
        self.student_id = student_id
        self.score = {'Chinese':0, 'Math':0, 'English':0}
    def set_score(self, course, score):
        if course in self.score:
            self.score[course] = score
    def print_score(self):
        print(f'学生{self.name}(学号:{self.student_id})的成绩为:')
        for course in self.score:
            print(f'{course}:{self.score[course]}分')

zeng = Student('小曾','002')
zeng.set_score('Chinese', 88)
zeng.set_score('Math', 95)
zeng.set_score('English',92)
zeng.print_score()

2、三大特性

1)封装

  • 只通过外部接口访问和使用类,隐藏不必要了解的内部细节

2)继承

  • 子类可以继承父类的属性和方法,从而减少冗余代码
  • 若子类和父类有同名方法,则优先使用子类方法
class Employee:
    def __init__(self, name, employee_id):
        self.name = name
        self.employee_id = employee_id
    def print_info(self):
        print(f'员工名:{self.name},工号:{self.employee_id}')

class FullTimeEmployee(Employee): #在类名后加括号,括号中写入要继承的父类名
    def __init__(self, name, employee_id, monthly_salary):
        super().__init__(name, employee_id) #用super()来继承父类的特定属性
        self.monthly_salary = monthly_salary
    def calculate_monthly_pay(self):
        print(f'{self.name}(工号:{self.employee_id})本月月薪为{self.monthly_salary}元')

class PartTimeEmployee(Employee):
    def __init__(self, name, employee_id, daily_salary, work_day):
        super().__init__(name, employee_id)
        self.daily_salary = daily_salary
        self.work_day = work_day
    def calculate_monthly_pay(self):
        salary = self.daily_salary * self.work_day
        print(f'{self.name}(工号:{self.employee_id})本月月薪为{salary}元')

zhang = FullTimeEmployee('张三', '1001', 6000)
li = PartTimeEmployee('李四', '2001',200, 15)
zhang.print_info()
li.print_info()
zhang.calculate_monthly_pay()
li.calculate_monthly_pay()

3)多态

  • 不同类可以拥有同一名称、不同定义的方法
  • 调用时不必对是何种对象进行条件判断,直接使用”对象名.方法名“进行调用

四、文件操作

1、路径

1)绝对路径:从根目录出发,以目标文件/目标目录为结尾

  • 类Unix操作系统(Linux、macOS等):只有一个根目录,用”/“表示
  • Windows操作系统:每个磁盘分区都有自己的根目录,如“C:\”

2)相对路径:从参照文件位置出发,用”.”表示参照文件当前所在目录,用“…”表示上一层的父目录

Day0:Python快速入门_第1张图片

2、读文件

#方法一
f1 = open('.\\data.txt', 'r', encoding='utf-8') #路径用\\隔开,'r'表示读,'utf-8'表示编码方式
content1 = f1.read()      #用read()读整个文件
content2 = f1.readline()  #用readline()读文件的一行内容
content3 = f1.readlines() #用readlines()返回一个列表,列表中各元素是文件各行的内容
f1.close() #使用完文件需要用close()关闭文件
#方法二
with open('.\\data.txt', 'r', encoding='utf-8') as f1
		content1 = f1.read()      #用read()读整个文件
		content2 = f1.readline()  #用readline()读文件的一行内容
		content3 = f1.readlines() #用readlines()返回一个列表,列表中各元素是文件各行的内容

3、写文件

#'r':读,'w':清空再写,'a':追加内容,'r+':同时读写

with open('.\\poem.txt', 'w', encoding='utf-8') as f1:
    f1.write('我欲乘风归去\n又恐琼楼玉宇\n高处不胜寒\n')

with open('.\\poem.txt', 'a', encoding='utf-8') as f1:
    f1.write('起舞弄清影\n何似在人间\n')
  • 注意在读/写文件后,文件指针会停留在所操作文件内容的末尾,可以使用f1.seek(0)将文件指针移动到文件开头

五、其它

1、异常处理

try:#可能产生错误的代码
    weight = float(input('请输入您的体重(单位:kg):'))
    height = float(input('请输入您的身高(单位:cm):'))
    bmi = weight / (height ** 2)
except:#try代码块产生错误时运行
    print('发生了错误')
else:#try代码块未产生错误时运行
    print(f'您的BMI为:{bmi}')
finally:#无论是否错误都会运行
    print('程序结束运行')

2、测试

1)示例

#实现代码(my_calculator.py)
def my_adder(x, y):
		return x + y
#测试代码(test_my_calculator.py)
import unittest #unittest是python自带的一个用于测试的库
from my_calculator import my_adder #从实现代码文件中引入要测试的函数
class TestMyAdder(unittest.TestCase): #以unittest.TestCase为父类,继承各种测试功能
		def test_positive_with_positive(self): #每个测试用例都是类中的方法,名字必须以test_开头
				self.assertEqual(my_adder(5,3), 8) #assertEqual方法
		def test_positive_with_negtive(self):
				self.assertEqual(my_adder(5,-3), 2)

在终端输入python -m unittest以运行unittest库,就会完成测试并展示测试结果

2)常见测试方法

self.assertEqual(A, B) #A是否在B中
self.assertTrue(A)     #A是否为真
self.assertIn(A, B)    #A是否在B中

你可能感兴趣的:(算法之旅,python,学习,笔记)