Python语法(基于C语言基础和简单Python基础)
参考学习资料:【你觉得自己这辈子都学不会编程?超超超基础Python课程,3小时快速入门 【自学Python教程合集】【3小时快速入门Python】】 https://www.bilibili.com/video/BV1944y1x7SW/?share_source=copy_web\&vd_source=3aa9ee0c4fcf2e52762a44f906c09534
命名规则
变量一般如下命名:
- han_xiang
- computer_science
类名一般如下命名:(驼峰命名法)
- StudentCourse
数学运算
加减乘除
两个除号(//)表示除完后向下取整。
乘方:**
e.g. 2的三次方: 2 ∗ ∗ 3 2**3 2∗∗3
其他复杂运算的数学公式:
python
import math
e.g.
python
import math
print(math.log2(8))
可以通过查阅文档来寻找math库中提供的数学公式:
链接:https://docs.python.org/zh-cn/3/library/math.html
数据类型
- 字符串 str
- 整数 int
- 浮点数 float
- 布尔类型 bool
- 空值类型 NoneType
- 列表
- 字典
- ......
python
type("Hello") # <class 'str'>
type(6) # <class 'int'>
type(None) # <class 'NoneType'>
注意布尔类型的True和False首字母要大写。
输入语句
python
input("这里是给用户的一些提示")
条件语句
python
if [条件]:
[动作]
elif [条件]:
[动作]
else:
[动作]
条件语句可以嵌套。
逻辑运算
- 与:and
- 或:or
- 非:not
e.g.
python
not ( x > 5 and (x < 10 or x == 12))
列表
e.g.
python
shopping_list = ["键盘", "键帽"]
shopping_list.append("显示器") # 此时原先的列表已经改变
print(len(shopping_list)) # 打印列表里元素的数量
shopping_list.remove("显示器") # 该元素必须之前存在于列表中
shopping_list[1] = "音响" # 索引为1的元素被修改
Python的列表可以放不同类型的数据:
python
list1 = ["Hello"]
list1.append(66.6)
list1.append(True)
list1.append(None)
print(list1)
此外,Python还有很多可以针对列表的内置函数:
python
num_list = [1, 13, -7, 2, 96]
print(max(num_list))
print(min(num_list))
print(sorted(num_list))
字典&元组
→哈希表
e.g. 电话簿可以用人名查到手机号
python
contacts = {"小明": "13700000000",
"小花": "13700000001"}
print(contacts["小明"])
元组:(列表用方括号,元组用圆括号)
python
example_tuple = ("键盘", "键帽")
元组不可变,不能添加或删除元素。
字典与元组的结合使用:
python
contacts = {("张伟", 23): "15000000000",
("张伟", 34): "15000000001",
("张伟", 56): "15000000002"}
zhangwei23_phone = contacts[("张伟", 23)]
字典和列表一样,是可变的。
如果想知道某个键是否已经存在,"键 in 字典"会返回一个布尔值,告知该键是否已经存在于字典里。
python
del contacts["小明"] # 删除这个键值对
for循环
迭代的对象可以是列表、字典、字符串等。
python
temperature_list = [36.4, 36.3, 37.2, 37.0]
for temp in temperature_list:
# 对每个变量做一些事情
# ......
对于字典,可以采用如下操作:
python
temperature_dict = {"111": 36.4, "112": 36.3, "113": 37.2, "114": 37.0}
for staff_id, temperature in temperature_dict.items():
if temperature >= 38:
print(staff_id)
for循环结合range:
range的起始值在序列中,而结束值不在序列中。
python
for i in range(5, 10):
print(i)
上述代码运行后,i会依次被赋值为5到9的数字并打印。
range()还可以包含第三个参数,表示步长,也就是每次跨几个数字。
格式化字符串
f-字符串:
python
gpa_dict = {"小明": 3.251, "小花": 3.869, "小李": 2.683, "小张": 3.685}
for name, gpa in gpa_dict.items():
print(f"{name}你好,你的当前绩点为:{gpa:.2f}")
函数
e.g. 计算扇形面积
python
def calculate_sector(central_angle, radius):
sector_area = central_angle / 360 * 3.14 * radius ** 2
print(f"此扇形的面积为:{sector_area}")
calculate_sector(160, 30)
函数也可以带return。
面向对象编程
e.g. 创建House类
python
class House:
def __init__(self, 颜色, 位置, 卧室数):
self.颜色 = 颜色
self.位置 = 位置
self.卧室数 = 卧室数
house1 = House("紫色", "长沙", 4)
house2 = House("红色", "深圳", 3)
还可以在类中定义方法函数:
python
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): # 第一个"self"不能省略
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]}分")
类的继承:
e.g. 人类和小猫都属于哺乳动物
python
class Mammal:
def __init__(self, name, sex):
self.name = name
self.sex = sex
self.num_eyes = 2
def breathe(self):
print(self.name + "在呼吸...")
def poop(self):
print(self.name + "在拉屎...")
class Human(Mammal): # 继承的父类要写在括号里
def read(self):
print(self.name + "在阅读...")
class Cat(Mammal):
def scratch_sofa(self):
print(self.name + "在抓沙发...")
如果同时为Human和Cat添加has_tail属性,二者的取值结果并不相同。
解决:使用super()
python
class Mammal:
def __init__(self, name, sex):
self.name = name
self.sex = sex
self.num_eyes = 2
def breathe(self):
print(self.name + "在呼吸...")
def poop(self):
print(self.name + "在拉屎...")
class Human(Mammal):
def __init__(self, name, sex):
super().__init__(name, sex) # 这样会调用父类的构造函数
self.has_tail = False
def read(self):
print(self.name + "在阅读...")
class Cat(Mammal):
def __init__(self, name, sex):
super().__init__(name, sex)
self.has_tail = True
def scratch_sofa(self):
print(self.name + "在抓沙发...")
文件操作
相对路径&绝对路径
input()
异常处理
python
try:
user_weight = float(input("请输入您的体重(单位:kg):"))
user_weight = float(input("请输入您的身高(单位:m):"))
user_BMI = user_weight / user_height ** 2
except ValueError: # 值错误
print("输入非合法数字,请重新运行程序,并输入正确的数字。")
except ZeroDivisionError: # 分母为零错误
print("身高不能为零,请重新运行程序,并输入正确的数字。")
except: # 其他错误
print("发生了未知错误,请重新运行程序。")
else: # 当try语句没有产生任何错误时执行的语句
print("您的BMI值为:" + str(user_BMI))
finally: # 无论错误发生与否,最终都会被执行的语句
print("程序结束运行。")
代码测试
assert
python
assert 1 + 2 > 6 # AssertionError
Python单元测试库:unittest
e.g.
python
# my_calculator.py
# 实现代码
def my_adder(x, y):
return x + y
python
# test_my_calculator.py
# 测试代码
import unittest
from my_calculator import my_adder
class TestMyAdder(unittest.TestCase):
def test_positive_with_positive(self): # 函数名必须以"test_"开头
self.assertEqual(my_adder(5, 3), 8)
def test_negative_with_positive(self):
...
写好测试用例后,在编辑器(e.g. PyCharm)的终端输入:
python -m unittest
测试通过打印"·",测试不通过打印"F"。
unittest.TestCase类的常见测试方法:
- assertEqual(A, B)
- assertTrue(A)
- assertIn(A, B)
- assertNotEqual(A, B)
- assertFalse(A)
- assertNotIn(A, B)
高阶函数
一个函数的"函数名"作为参数传给另外一个函数,或一个函数的返回值为另外一个函数。
e.g.
python
def calculate_and_print(num, calculator):
result = calculator(num)
print(f"""
| 数字参数 | {num} |
| 计算结果 | {result} |""")
def calculate_square(num):
return num * num
def calculate_cube(num):
return num * num * num
def calculate_plus_10(num):
return num + 10
calculate_and_print(3, calculate_square) # 注意第二个参数传入的是函数名而非函数,不带括号
匿名函数
python
lambda num1, num2: num1 + num2 # 只能有一个语句/表达式