Python自学(适用于略有基础)

打印 上一主题 下一主题

主题 1659|帖子 1659|积分 4977

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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
其他复杂运算的数学公式:
  1. import math
复制代码
e.g.
  1. import math
  2. print(math.log2(8))
复制代码
可以通过查阅文档来探求math库中提供的数学公式:
链接:https://docs.python.org/zh-cn/3/library/math.html
数据范例



  • 字符串 str
  • 整数 int
  • 浮点数 float
  • 布尔范例 bool
  • 空值范例 NoneType
  • 列表
  • 字典
  • ……
  1. type("Hello") # <class 'str'>
  2. type(6) # <class 'int'>
  3. type(None) # <class 'NoneType'>
复制代码
留意布尔范例的True和False首字母要大写。
输入语句

  1. input("这里是给用户的一些提示")
复制代码
条件语句

  1. if [条件]:
  2.         [动作]
  3. elif [条件]:
  4.         [动作]
  5. else:
  6.         [动作]
复制代码
条件语句可以嵌套。
逻辑运算



  • 与:and
  • 或:or
  • 非:not
e.g.
  1. not ( x > 5 and (x < 10 or x == 12))
复制代码
列表

e.g.
  1. shopping_list = ["键盘", "键帽"]
  2. shopping_list.append("显示器") # 此时原先的列表已经改变
  3. print(len(shopping_list)) # 打印列表里元素的数量
  4. shopping_list.remove("显示器") # 该元素必须之前存在于列表中
  5. shopping_list[1] = "音响" # 索引为1的元素被修改
复制代码
Python的列表可以放差别范例的数据:
  1. list1 = ["Hello"]
  2. list1.append(66.6)
  3. list1.append(True)
  4. list1.append(None)
  5. print(list1)
复制代码
此外,Python尚有很多可以针对列表的内置函数:
  1. num_list = [1, 13, -7, 2, 96]
  2. print(max(num_list))
  3. print(min(num_list))
  4. print(sorted(num_list))
复制代码
字典&元组

→哈希表
e.g. 电话簿可以用人名查到手机号
  1. contacts = {"小明": "13700000000",
  2.                         "小花": "13700000001"}
  3. print(contacts["小明"])
复制代码
元组:(列表用方括号,元组用圆括号)
  1. example_tuple = ("键盘", "键帽")
复制代码
元组不可变,不能添加或删除元素。
字典与元组的联合使用:
  1. contacts = {("张伟", 23): "15000000000",
  2.                     ("张伟", 34): "15000000001",
  3.                     ("张伟", 56): "15000000002"}
  4. zhangwei23_phone = contacts[("张伟", 23)]
复制代码
字典和列表一样,是可变的。
如果想知道某个键是否已经存在,“键 in 字典”会返回一个布尔值,告知该键是否已经存在于字典里。
  1. del contacts["小明"] # 删除这个键值对
复制代码
for循环

迭代的对象可以是列表、字典、字符串等。
  1. temperature_list = [36.4, 36.3, 37.2, 37.0]
  2. for temp in temperature_list:
  3.         # 对每个变量做一些事情
  4.         # ……
复制代码
对于字典,可以采用如下操作:
  1. temperature_dict = {"111": 36.4, "112": 36.3, "113": 37.2, "114": 37.0}
  2. for staff_id, temperature in temperature_dict.items():
  3.         if temperature >= 38:
  4.                 print(staff_id)
复制代码
for循环联合range:
range的起始值在序列中,而结束值不在序列中。
  1. for i in range(5, 10):
  2.         print(i)
复制代码
上述代码运行后,i会依次被赋值为5到9的数字并打印。
range()还可以包含第三个参数,表示步长,也就是每次跨几个数字。
格式化字符串

f-字符串:
  1. gpa_dict = {"小明": 3.251, "小花": 3.869, "小李": 2.683, "小张": 3.685}
  2. for name, gpa in gpa_dict.items():
  3.     print(f"{name}你好,你的当前绩点为:{gpa:.2f}")
复制代码
函数

e.g. 计算扇形面积
  1. def calculate_sector(central_angle, radius):
  2.     sector_area = central_angle / 360 * 3.14 * radius ** 2
  3.     print(f"此扇形的面积为:{sector_area}")
  4.    
  5. calculate_sector(160, 30)
复制代码
函数也可以带return。
面向对象编程

e.g. 创建House类
  1. class House:
  2.     def __init__(self, 颜色, 位置, 卧室数):
  3.         self.颜色 = 颜色
  4.         self.位置 = 位置
  5.         self.卧室数 = 卧室数
  6.         
  7. house1 = House("紫色", "长沙", 4)
  8. house2 = House("红色", "深圳", 3)
复制代码
还可以在类中定义方法函数:
  1. class Student:
  2.     def __init__(self, name, student_id):
  3.         self.name = name
  4.         self.student_id = student_id
  5.         self.grades = {"语文": 0, "数学": 0, "英语": 0}
  6.         
  7.     def set_grade(self, course, grade): # 第一个“self”不能省略
  8.         if course in self.grades:
  9.             self.grades[course] = grade
  10.             
  11.     def print_grades(self):
  12.         print(f"学生{self.name} (学号:{self.student_id}) 的成绩为:")
  13.         for course in self.grades:
  14.             print(f"{course}: {self.grades[course]}分")
复制代码
类的继承:
e.g. 人类和小猫都属于哺乳动物
  1. class Mammal:
  2.     def __init__(self, name, sex):
  3.         self.name = name
  4.         self.sex = sex
  5.         self.num_eyes = 2
  6.         
  7.     def breathe(self):
  8.         print(self.name + "在呼吸...")
  9.         
  10.     def poop(self):
  11.         print(self.name + "在拉屎...")
  12.         
  13. class Human(Mammal): # 继承的父类要写在括号里
  14.     def read(self):
  15.         print(self.name + "在阅读...")
  16.         
  17. class Cat(Mammal):
  18.     def scratch_sofa(self):
  19.         print(self.name + "在抓沙发...")
复制代码
如果同时为Human和Cat添加has_tail属性,二者的取值结果并不相同。
解决:使用super()
  1. class Mammal:
  2.     def __init__(self, name, sex):
  3.         self.name = name
  4.         self.sex = sex
  5.         self.num_eyes = 2
  6.         
  7.     def breathe(self):
  8.         print(self.name + "在呼吸...")
  9.         
  10.     def poop(self):
  11.         print(self.name + "在拉屎...")
  12.         
  13. class Human(Mammal):
  14.     def __init__(self, name, sex):
  15.         super().__init__(name, sex) # 这样会调用父类的构造函数
  16.         self.has_tail = False
  17.         
  18.     def read(self):
  19.         print(self.name + "在阅读...")
  20.         
  21. class Cat(Mammal):
  22.     def __init__(self, name, sex):
  23.         super().__init__(name, sex)
  24.         self.has_tail = True
  25.         
  26.     def scratch_sofa(self):
  27.         print(self.name + "在抓沙发...")
复制代码
文件操作

相对路径&绝对路径
input()
非常处理

  1. try:
  2.     user_weight = float(input("请输入您的体重(单位:kg):"))
  3.     user_weight = float(input("请输入您的身高(单位:m):"))
  4.     user_BMI = user_weight / user_height ** 2
  5. except ValueError: # 值错误
  6.     print("输入非合法数字,请重新运行程序,并输入正确的数字。")
  7. except ZeroDivisionError: # 分母为零错误
  8.     print("身高不能为零,请重新运行程序,并输入正确的数字。")
  9. except: # 其他错误
  10.     print("发生了未知错误,请重新运行程序。")
  11. else: # 当try语句没有产生任何错误时执行的语句
  12.     print("您的BMI值为:" + str(user_BMI))
  13. finally: # 无论错误发生与否,最终都会被执行的语句
  14.     print("程序结束运行。")
复制代码
代码测试

assert
  1. assert 1 + 2 > 6 # AssertionError
复制代码
Python单元测试库:unittest
e.g.
  1. # my_calculator.py
  2. # 实现代码
  3. def my_adder(x, y):
  4.         return x + y
复制代码
  1. # test_my_calculator.py
  2. # 测试代码
  3. import unittest
  4. from my_calculator import my_adder
  5. class TestMyAdder(unittest.TestCase):
  6.     def test_positive_with_positive(self): # 函数名必须以“test_”开头
  7.         self.assertEqual(my_adder(5, 3), 8)
  8.         
  9.     def test_negative_with_positive(self):
  10.         ...
复制代码
写好测试用例后,在编辑器(e.g. PyCharm)的终端输入:
  1. python -m unittest
复制代码
测试通过打印“·”,测试不通过打印“F”。
unittest.TestCase类的常见测试方法:


  • assertEqual(A, B)
  • assertTrue(A)
  • assertIn(A, B)
  • assertNotEqual(A, B)
  • assertFalse(A)
  • assertNotIn(A, B)
高阶函数

一个函数的“函数名”作为参数传给另外一个函数,或一个函数的返回值为另外一个函数。
e.g.
  1. def calculate_and_print(num, calculator):
  2.         result = calculator(num)
  3.     print(f"""
  4.     | 数字参数 | {num} |
  5.     | 计算结果 | {result} |""")
  6.    
  7. def calculate_square(num):
  8.     return num * num
  9. def calculate_cube(num):
  10.     return num * num * num
  11. def calculate_plus_10(num):
  12.     return num + 10
  13. calculate_and_print(3, calculate_square) # 注意第二个参数传入的是函数名而非函数,不带括号
复制代码
匿名函数

  1. lambda num1, num2: num1 + num2 # 只能有一个语句/表达式
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表