858983646 发表于 2024-9-7 18:20

看了半本Python编程从入门到实践,来发个笔记

看看能不能彩色高亮显示代码啊,只会vscode里保存为py了高亮显示,转md就变成纯黑的了,手机里看着好累,能不能转成pdf啊


#1.变量
b = "a"    #用单引号‘’也可以,也可以是""表示为空,表示字符串,就是文本
b += "c"    #变成ac,追加一个c
b = 1      #设置b为数值1
b+=1      #b变成2,追加1
x, y, z = 0, 0, 0#同时多个变量设置
print(b)    #print(b.title()) 首字母大写,upper全大写,lower全小写
x = int(x)    #x变成数值

x = 10   #设置变量等于10
def my_function():
    global x#声明x是全局变量,否则打印出不来,否则x=20会创建一个内部变量。若是 nonlocal ,则声明是嵌套函数里的局部变量(嵌套函数里的变量下级函数可以直接访问,但是不 nonlocal 不可以修改)
    print(x)       #输出10
    x = 20      #全局x变成了20
    print(x)       #输出20
my_function()   #输出10^n20

#2.字符串
c = f"{a} {b}"    #c相当于a连着b,也可以直接print(f"{a} {b}")
print("a:\b\nc\nd")   #a:bcd每一个字都换行显示
b = b.rstrip()    #删除b右边的空格,lstrip() 是左边,strip()是两侧
b = 是我的.removeprefix('我的')#去掉我的只剩是
b += a.line.lstrip(),在b后面接着写a,并且去除a的左边空格分割字符串为列表
text = "one-two-three-four"
parts = text.split('-', maxsplit=2)# 可以括号里空着,指定-分割,不写就用空格,换行分割,指定最多分割2次。
print(parts)# 输出: ['one', 'two', 'three-four']


#3.数
#**6是6次方
#+-*/   #加减乘除   
#%#求余数,比如5%3是2
#print(5+3)是8,print("5+3")是5+3
#浮点数就是小数,有一次浮点,后面都变浮点。除法会产生浮点数,即使4/2数字中加下划线_可以更好辨认,不影响其他


#4.列表
zimu = ['a', 'b', 'c', 'd']    #abcd内容的列表
a = zimu[-3:]#切片,倒数3个,输出字母bcd   #输出ab,从a(第0个)开始,索引到2(不包括2)
zimu2 = zimu[:]    #[:] 切片全部,可用于复制列表,但是zimu如果史叠加引用另外的变量列表等仍会继续引用原本的,若写zimu2 = zimu,一旦zimu列表内容变动,会一起变动
zimu2 = copy.deepcopy(zimu)#这样复制更彻底,直接复制现在的内容,不怕引用。
print(zimu.title())   #显示a,并大写(左边第0个),从0开始计数的,-1是最后一个,-2是倒数第二个
#可以用字符串里的f把多个联系起来
zimu = 'e'      #把第一个的a改成e
zimu.append('f')   #把f加到列表最后
zimu.insert(0, 'g'),#在a前面插入g
del zimu         #删除a(就是第一个)
x = zimu.pop(0)      #把x变量设置为a,并把a从列表里弹出(删除)
zimu.remove('a')   #删除a,只删第一个a,
while 'a' in zimu
zimu.remove('a')#可以删除所有a
zimu.sort()#列表永久按照字母顺序排序
zimu.sort(reverse=True) #字母反向排序
zimu.reverse()#永久按照原本顺序反向
print(sorted(zimu))#临时按字母顺序显示列表,列表本身不变,反向reverse=True也可以用
len(zimu)   #输出列表内个数,结果是4


5.操作列表
for循环
zimu = ['a', 'b', 'c', 'd']
for xx in zimu:
print(xx)   #挨个打印所有zimu内的内容
range(1,6)#(调用时才生成)生成整数,从1开始,6之前结束,所以只有1-5
range(start, stop, step)#生成从 start 开始,每次增加 step ,直到达到或超过 stop (不包括 stop )的整数序列。
numbers = list(range(1, 6))#创建一个列表1-5
for x in range(30):         for循环30次

f = []    #创建一个空列表,名字是f
for value in range(1, 11):
p = value ** 2
f.append(p)   #把1-10的平方放入列表f,也可以1/2合并,写成f.append(value**2)
squares =    #合成一句,叫做列表推导式
min(p) max(p) sum(p)    #这是数值列表中的最大最小和平均值

6.元组
#a = (3,5,)和列表的差别是不可变,省内存,防止不小心改变,但是可以重新再次赋值,比如再来个a = (3,6,)就覆盖了

7.if如果
xx = ['a', 'b', 'c', 'd']
for xy in xx:
if xy == 'b':#两个等号是是否相等,单个=是赋值,!=是不等于,还有<,>,<=,<=(仅数字),if 'b' in xy:xy里有b,not in是没有,
if xy == 'b' and xy <c   #可以and连着,也可以or,且或的意思
          print(xy.upper())#upper()全部大写
      else:
          print(xy)

if-elif-else   #第一个if不符合,第二个elif,再不是就else,要是第一个符合就没后面了
if-if-else    #不管第一个if,第二个if都会判断

zimu = []
if zimu:#后面换行继续其他代码,若zimu为空,是flase,不执行if,不为空为true,继续执行if的


#8.字典
早饭 = {'品种': '包子', '个数':'5'}      #设置一个字典
早饭 = {            #竖着写也可以
    '品种': '包子',
    '个数':'5'}
print(早饭['品种'])       #输出包子
早饭['大小'] = '小笼包'   #加入早饭字典
早饭['品种'] =' 粥       #把包子改成粥
del 早饭['品种']         #删掉品种
早饭.get('颜色','none(可改或者不写)')   #get() 方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的,这样用get不怕不存在字典而报错
for k, v in 早饭.items():      #items返回所有键和值,然后变量k为键,v为值。   items可以换成key单独返回键,也可以改value单独返回值
print(k,v)   #输出品种 包子^n个数 5
for k in sorted(早饭.keys()):   #排序后遍历
sorted改set,变成去除重复值,输出的是集合

字典 = {'a': 1, 'b': 2, 'c': 3}
value = 字典.pop('d', '不存在(可以自己改)') # 键 'd' 不存在,返回 '不存在',若不指定会返回KeyError。。。若把d改下c,会返回3
print(value) # 输出 'default_value'

每天的早饭 = [早饭_0, 早饭_1, 早饭_2]#列表嵌套字典,打印第一项显示的是{'品种': '包子', '个数':'5'}
早饭 = {'品种': '包子', '内容': ['a', 'b', 'c', 'd'],}#这是字典嵌套列表,早饭['内容'])相当于列表
早饭 = {'品种': '包子', '用料':{'材料': '牛肉', '重量':'5斤'}}   #字典套字典,早饭['用料']['重量']代表5斤


#9.用户输入   
x = input("请输入")   #提示请输入,x为输入法的值,默认为字符串
x = int(x)            #x变成数值
print(x)             #显示输入的东西

#10.while循环
a = 1
while a <= 5:   循环到5为止
print(a)   
a += 1#a追加1
#也可以设置一个变量 x=true,while判断是否为true ,while x :就可以判断,=true可以省略

while a=1:   #运行到break语句时会结束循环,for,while等循环都可以
      x = input(请输入)
      if x == '退出':
          break   #while就结束了,若break改continue,就是函数重新从while循环开始运行。for循环也可以用

未验证 = ['a', 'b', 'c']
已验证 = []
while 未验证:      #未验证不为空
      待添加 = 未验证.pop()    #pop()是从列表里提取所有内容赋值到待添加,pop(0)是提取a
      已验证.append(待添加)    #添加到已验证里
while 'a' in zimu      #循环删除zimu列表里所有的a
zimu.remove('a')

#11.函数
def xx(y,z):      #y是形参
def xx(y,z="好好"):      默认z等于好好,可以后面不指定用默认值,也可以指定""表示空白
#形参实参建议不要等号两侧加空格
    print(f"{y} {z}")
    aa = f"{y} {z}"      
   return aa             #返回aa,可以返回字典列表变量都可以
xx("你好","不好")   实参    #打印你好不好,再把aa赋值你好不好   
xx(y="你好",z="不好")       #也可以这样不怕顺序错乱,否则有默认值在前面,不写默认值导致顺序不对

变量 =xx(y="你好",z="不好")   #相当于aa#可以函数外调用
#参数可以是字典,列表等,列表可以用 [:] 切片来复制,防止改动原本列表
def xx(y,*z):         #形参可以是*z,就是元组
print(z)          #还是使用z,输出'a', 'b', 'c'
xx(12, 'a', 'b', 'c')   #让*z接收abc变成一个元组,就第一个参宿放入y,后面其他都放入*z
#*z是创建元组,**z是创建字典,xx(12, 品种 =' 粥')这样使用


#12.导入模块
#把函数同目录保存为1.py,然后import 1,就可以导入了,相当于把1.py里的函数写入代码,调用时函数名前改成1.函数名
from 1 import 函数_0 函数_1函数_2   #导入1.py里的部分函数,调用时可以直接用函数名字,如果用*可以一次导入所有
rom 1 import 函数_0 as xx       #把函数0导入并改名成xx


#13.类   比如车是对象,创建一类车的模板叫类,类里的函数叫方法,特斯拉model叫实例
class Car:   #创建Car类,一般类首字母大写
    def __init__(self, brand, model):    #self可以写成别的,后面对应着都修改,self就是car类本身的意思
      self.d = brand    #可以类里一起用,d一般写成brand,可以改名字
      m = model      #这样写只能这个def里用
      print(m)      #可以输出,但是def外其他地方输出不了
      self.model= model# 一般这样写可以类里用,或者全局类.self.modle这样调用
      self.xxx = 1      #可以自己再设置别的作为类的属性,可以不写在init里,但是只能在所在的方法被调用,仍可以类外面直接改
    def describe(self):
      print(f"The car is a {self.d} {self.model}.")
# 创建 Car 类的实例   实例字母一般小写
my_car = Car("Tesla", "Model S")   #创建一个实例my_car
# 调用实例方法
my_car.describe()         # 输出: The car is a Tesla Model S   #()里可以填参数,比如3,相应的方法里也需要加参数def describe(self,3):
print(my_car.model)       #访问实例的属性,也可以是不在init的xx,比如my_car.xx = 5 可以直接设置属性

#14.子类   
class 电动Car(Car):#括号一下,括号里是父类,电动Car 继承自 Car
    def __init__(self, brand, model, 电量):   #子类需要的属性
      super().__init__(brand, model)# 调用父类的构造器来初始化 brand 和 model
      self.b = 电量                #添加新的属性 电量
       self.其他 = 其他()            #属性可以是另一个类,详见后面
def describe_battery(self):
      print(f"This electric car has a {self.b}-kWh battery.")
my_电动_car = 电动Car("Tesla", "Model 3", "75")   # 创建 ElectricCar 类的实例
my_电动_car.describe()# 输出: The car is a Tesla Model 3   # 调用继承自父类的方法
my_电动_car.describe_battery()#调用子类特有的方法,输出: This electric car has a 75-kWh battery
#可以重写方法,同名优先子类的方法

class Engine:#可以把类当类的属性,创建一个类,作为后面类里的属性
    def __init__(self, horsepower):
      self.horsepower = horsepower
    def display_horsepower(self):
      print(f"This engine has {self.horsepower} horsepower.")
class Car:
    def __init__(self, brand, model, horsepower):
      self.brand = brand
      self.model = model
      self.engine = Engine(horsepower)# Car 类的属性继续给到engine
    def describe_car(self):
      print(f"The car is a {self.brand} {self.model}.")
      self.engine.display_horsepower()# 调用 Engine 实例的方法
my_car = Car("Tesla", "Model S", 450)    # 创建 Car 类的实例,同时创建 Engine 类的实例作为 Car 实例的属性
my_car.describe_car()      # 调用 Car 类的方法输出: The car is a Tesla Model S. 和 This engine has 450 horsepower
my_car.engine.display_horsepower()    这样也可以调用,()里可以填参数,这个函数里没有


from car import Car ,电动car   #类可以保存为py,一个py里写多个类,后导入,使用时就是用Car,和写进入一个样
import car导入整个模块,后面使用就是car.Car,但是上面那句导入可用Car
#模块可以导入模块不限套娃,也可以导入时as别名

#导入其他做好的模块
from random import randint
randint(1, 6)   #输出1-6之间的随机数 包括1/6
from random import choice
    players = ['1', '2', '3']
first_up = choice(players)#输出123间随机一个

#类和函数一般这种都写个""xxx"来作为文档字符串来描述函数干嘛的

#14.导入文件
from pathlib import Path
path = Path('pi_digits.txt')#路径,可以绝对或相对路径,现在是相对路径,省略PY文件所在目录
contents = path.read_text(encoding='utf-8')    #默认会末尾返回一个空字符 ,可以用contents = contents.rstrip()删除最后的空白;(encoding='utf-8')括号里的不填也可以,但是默认编码不一样会读取不到
path.write_text("123")       #在该txt写入123,也可以1/n2/n3这样123换行显示
xx = contents.splitlines()   #按照行分割成列表,比如"第一行\n第二行\r\n第三行\r第四行",输出['第一行', '第二行', '第三行', '第四行']
print(xx)
#相对文件路径:相对于当前工作目录的路径。例如,如果你的当前工作目录是/home/user ,那么相对路径myfolder/myfile.txt将指向/home/user/myfolder/myfile.txt 。
#绝对文件路径:从根目录开始的完整路径。例如/home/user/myfolder/myfile.txt就是一个绝对路径。


#15.错误处理
try:   #尝试运行下面的代码
    a = 5/q   #q是用户输入的,可能是0
except : xxxError#如果上面的代码没问题,自动跳过这个,如果是出现写的这个错误,执行print
print("你不能除以0")#也可以写pass,就是什么也不做。pass在别地方也可以写,就是啥也不做的意思,但可以用来占个地方以后写。
else:   except如果跳过就执行这个,不跳过不执行
    print(a)
#else可选,try-except写了,错误了会继续执行后面代码,否则错误了程序停止,else里的只有try顺利才运行

path = Path('username.json')    #path可以省略try
if not path.exists():   #文件不存在就执行,去掉not就是存在时执行
else:#文件存在执行


#16.存储数据
from pathlib import Path   
import json
numbers = # 定义一个数字列表
path = Path('numbers.json')    # 创建一个Path对象,指向将要创建的JSON文件
contents = json.dumps(numbers)# 将数字列表转换为JSON格式的字符串
path.write_text(contents)      # 将JSON字符串写入文件
contents = path.read_text()
numbers = json.loads(contents)    #返回的就是那个字符串

#17.pytest测试
# test_example.py#创建一个py,可以py里调入其他函数模块来测试,只运行test开头的函数
def add(a, b):
    return a + b
def test_add():
    assert add(2, 3) == 5   #断言1等于大于小于不等等任何都可以
assert add(5, 0) == 5   #断言2   

pytest test_example.py   #cmd运行,会报告断言失败还是成功

# test_example.py在所有测试前运行某个代码,用fixture(夹具),下面是示例
import pytest
@pytest.fixture(scope="module")
def my_fixture():            
    print("Setup: my_fixture")
    yield         #前面的准备运行测试函数前执行,后面的一个测试函数运行完执行
    print("Teardown: my_fixture")
def test_one(my_fixture):
    print("Running test_one")
    assert True
def test_two(my_fixture):
    print("Running test_two")
    assert True
#运行顺序:yield前,测试1,yield后,yield前,测试2,yield后

def pytest_sessionstart(session):
print("xx")   #在测试会话开始时调用,整个测试会话只调用一次。可以用来执行一些会话级别的设置
def pytest_sessionfinish(session,exitstatus):    #就是会话结束时运行。session是当前会话的意思,exitstatus参数是一个整数,表示测试会话的退出状态。这个值通常由pytest设置,若为0是运行成功,根据情况调用。







woojun 发表于 2024-9-7 18:52

txt文件转不了pdf吧

858983646 发表于 2024-9-7 18:58

woojun 发表于 2024-9-7 18:52
txt文件转不了pdf吧

我发了帖子就变成彩色高亮了,再研究研究怎么打印成单页pdf就可以弄好啦

ruanxiaoqi 发表于 2024-9-7 19:08

这种方式学编程,既做了笔记,又展示分享了学习成果!

zlqhysy 发表于 2024-9-7 19:12

进来学习一下。

风华绝代谢长留 发表于 2024-9-7 19:15

不错不错

laotzudao0 发表于 2024-9-7 19:33

笔记直接记到语雀里面去, 方便管理, 支持功能也较多, 转PDF太局限了

858983646 发表于 2024-9-7 19:49

laotzudao0 发表于 2024-9-7 19:33
笔记直接记到语雀里面去, 方便管理, 支持功能也较多, 转PDF太局限了

谢谢,我去看看

仙鬼同拥 发表于 2024-9-7 19:59

858983646 发表于 2024-9-7 18:58
我发了帖子就变成彩色高亮了,再研究研究怎么打印成单页pdf就可以弄好啦

鄙人不才,只看过前三章,现在还停留在指定编码格式print汉字的水平上,但你这个问题我或许可以解决,后面写的可能会有点长,希望可以耐心看完。
因为你发到论坛上面,discuz论坛的code标签支持语法高亮,你用的Python编辑器也支持语法高亮,但这些都在显示层,本质上输出保存的还是txt字符。
打个比方,我就写一个(255,0,0)或者0xFF0000你把这两个颜色值丢到任何一个显示颜色的软件里面都能识别到是红色,包括论坛的color标签,能用是能用,但要想展示给别人看,总不能就写成这样吧?如果能显示成——0xFF0000(红色)这就很方便阅读了,但是也就失去了运行能力,那怎样才能显示成这样带解释的呢?这就需要一个中间体格式——html格式了,你如果从一些配色网站复制这些颜色值的话,后面肯定会带上解释;呐,同理,你要打印带语法高亮的Python代码,也可以把代码转成html就带上高亮的颜色标签了,然后用浏览器打开html,用pdf虚拟打印机打印到pdf文件就可以了。
这也算是去中心化吧,要保留代码的运行能力,就要牺牲一部分可读性,要完全保留可移植的可读性,那基本就要丢掉运行能力了

Fooool 发表于 2024-9-7 20:15

可以的,支持一下
页: [1] 2 3
查看完整版本: 看了半本Python编程从入门到实践,来发个笔记