Python学习笔记【01-基础语法】

news2024/9/21 4:24:48

文章目录

  • 第一章
    • 输入输出print
    • 转义字符
    • 字符编码
    • 标识符和保留字
    • 变量
    • 数据类型
      • 整形
      • 浮点型
      • 布尔类型
      • 字符串类型
      • 数据类型转换
    • 注释
  • 第二章
    • input()函数
    • 运算符
      • 算术运算符
      • 赋值运算符
      • 比较运算符
      • 布尔运算符(逻辑运算符)
      • 位运算符
      • 运算符的优先级
  • 第三章
    • 顺序结构
    • 对象的布尔值
    • 单分支结构
    • 双分支结构
    • 多分支结构
    • 嵌套分支
    • 三元表达式
    • pass语句
    • 内置函数range()
    • 循环
      • while循环
      • for-in循环
      • break
    • continue
    • 和循环搭配之用的else
    • 嵌套循环中的break和continue

第一章

输入输出print

print函数的作用是向目的地输出内容
内容可以是: 字符串,数字,表达式
目的地可以是:控制台,文件
print可以在控制台输出字符串

print("Hello World!")

输出数字

print(114514)

输出含有运算符的表达式

print(114000 + 514)

向文件输出,就是编写文件内容

fp = open("D:/Project/Python/study/day01/text.txt", "a+")# 第一个变量是文件路径,第二个变量表示续写文件
print("hello world", file = fp)
fp.close() #关闭文件

不换行输出

print("114","514")
print(114,"514")
print(114,514)
print("114514", end="") # 这种才是真正的不换行输出

转义字符

大多数编程语言会有一些特殊字符:回车,换行,制表符…,这些字符可以通过转义字符反斜杠在字符串中表示出来:\

在这里插入图片描述
换行符,可以让字符串多行输出

print("第一行\n第二行")

回车,回车和换行符不一样会,回车会让回车符之前的字符串不输出

print("hello\rworld")

制表符

print("hello\tworld")
print("helloooo\tworld")

一个制表符代表四个空格,但是制表符前面的字符数不是4的整数倍,制表符会补全空格,使字符总数变成4的整数倍
在这里插入图片描述
退格,退格会把退格字符前一个字符去掉

print("hello\bworld")

双引号、单引号、反斜杠

print("这是一个单引号\'")
print("这是一个双引号\"")
print("这是一个反斜杠\\")

在字符串之前写一个r可以让程序忽视转义字符,但是字符串最后的字符不能是单数个反斜杠

print(r"这是两个反斜杠\\") # 这是两个反斜杠\\
print(r"a\"a") # a\"a
print(r""") # 这个会报错

字符编码

chr()函数是Python中的一个内置函数,它接受一个整数参数,并返回对应的Unicode字符。
ord()函数是另一个Python中的内置函数,它接受一个Unicode字符作为参数,并返回对应的整数值。
chr()函数和ord()函数是互逆的,即ord(chr(x)) == x和chr(ord©) == c。它们可以在需要将整数和字符之间进行转换的情况下使用。请注意,chr()函数和ord()函数只适用于Unicode字符,而不适用于ASCII字符或其他字符集。

print(chr(23002)) # 姚
print(ord("姚")) #23002

标识符和保留字

我们给变量、函数、类、模块和其它对象起名名字叫标识符
在python中一些单词本赋予了特殊的含义,标识符不能使用这些特殊单词,这些单词就叫做保留字(关键字)

定义标识符的规则:
可以使用字母(大小写)、数字、下划线
不能以数字开头
不能是保留字
严格区分大小写

使用keyword库中的keyword变量即可查看有哪些保留字

import keyword
print(keyword.kwlist)

变量

变量由三部分组成,id,类型,值。id是该变量在内存中的唯一地址

定义变量: 变量名 = 值,python中定义变量不需要写变量的类型

name = "张三"

可以通过函数来获取变量的id和类型

print(id(name)) # 2644770188400
print(type(name)) # <class 'str'>

变量可以多次赋值

name = '张三'
print(name) # 张三
name = '李四'
print(name) # 李四

数据类型

整型 int 114514
浮点型 float 114.514
布尔型 bool True(代表真) ,False(代表假)
字符串类型 str “张三” ‘张三’

整形

整形 integer 简写为int 可以表示正整数、负整数和零
整数有不同的表达方式:
十进制->默认的进制
二进制->以0b开头
八进制->以0o开头
十六进制->以0x开头

a = 123 #123
b = 0b101010 #42
c = 0o177 #127
d = 0x1ae #430
print(a,b,c,d)

浮点型

浮点数由整数部分和小数部分组成
但浮点数存在不精确性

a = 1.1
b = 2.2
print(a + b) #3.3000000000000003

解决不精确的方法:导入decimal模块

from decimal import Decimal
print(Decimal('1.1') + Decimal('2.2')) # 3.3
# 主要这里的1.1和2.2是字符串类型

布尔类型

布尔类型只有两个值,一个是真:True,一个是假:False,可以在判断语句中使用
布尔类型数据可以转换成数字,Ture可转换为1,False可转换成0

bool1 = True;
bool2 = False;
print(bool1,type(bool1)) #True <class 'bool'>
print(bool2,type(bool2)) #False <class 'bool'>

字符串类型

字符串类型是非常常见的数据类型,它可以用单引号,双引号,三引号来表示
三引号就是三个单引号或者三个双引号,用三引号可表示多行字符串

str1 = '张三' # 单引号
str2 = "李四" # 双引号
str3 = r'''王五
        赵六''' # 三个单引号的三引号
str4 = """王五
        赵六""" # 三个双引号的三引号
print(str1,type(str1)) #张三 <class 'str'>
print(str2,type(str2)) #李四 <class 'str'>
print(str3,type(str3)) 
#王五
#        赵六 <class 'str'>
print(str4,type(str4))
#王五
#        赵六 <class 'str'>

数据类型转换

不同数据类型的数据可以相互转换
int数据可以由字符串或者float数据转换(使用int()函数)
float数据可以由int或者字符串数据转换(使用float()函数)
字符串数据也可以由int或者float类型数据转换(使用str()函数)
布尔类型数据也可以转换成int类型数据,True代表1,False代表0
在这里插入图片描述
int()

a = "1"
b = '-1'
c = 1.1
d = True
print(int(a),type(int(a)))# 1 <class 'int'>
print(int(b),type(int(b)))# -1 <class 'int'>
print(int(c),type(int(c)))# 1 <class 'int'>
print(int(d),type(int(d)))# 1 <class 'int'>

float()

a = 1
b = '-1'
c = "1.12"
print(float(a),type(float(a)))# 1.0 <class 'float'>
print(float(b),type(float(b)))# -1.0 <class 'float'>
print(float(c),type(float(c)))# 1.12 <class 'float'>

str()

a = 122
b = 1.11
c = True
print(str(a),type(str(a)))# 122 <class 'str'>
print(str(b),type(str(b)))# 1.11 <class 'str'>
print(str(c),type(str(c)))# True <class 'str'>

注释

注释即为嵌入在程序中的,对程序没有影响的,对代码有标注性意义的文本。(这是我给注释下的定义)
注释可分为单行注释和多行注释
单行注释用井号来表示"#"
python中没有多行注释,但是你可以写一个多行字符串,不给他添加变量来代替多行注释

# 单行注释
"""
多行注释
"""

还有一个特殊类型注释,中文编码声明注释,声明该文件的编码格式
注意:该行代码需要写在文件的第一行

# coding: gbk

第二章

input()函数

参数:在控制台的提示文字
作用:input函数数用于获取标准输入(通常是键盘)获取用户的输入,它的返回值就是用户的输入
返回值:input函数的返回值都是str类型,如果需要其他类型的数据,就使用类型转换函数进行转换

str = input("请输入一个字符串:"); # bianys
print(str,type(str)) #bianys <class 'str'>
str = input("请输入一个数字:"); # 2
print(str,type(str)) #2 <class 'str'>

可以看到,就算输入的是数字,返回的也是字符串类型的数据。

运算符

算术运算符

print(1+1) #加法运算符:+
print(1-1) #减法运算符:-
print(1*1) #乘法运算符:*
print(3/2) #除法运算符:/ 1.5
print(3//2) #整除运算符://,返回值向下取整 1
print(9//-4) # -3
print(-9//4) # -3
print(5 % 3) #取余运算符:%,余数 = 被除数 - 除数*商
print(-5 % 3) # 1
print(5 % -3) # -1
print(2**3) #幂运算符:**,该表达式表示2的三次方

赋值运算符

赋值运算符就是给变量赋值的,用直接赋值,链式赋值,参数赋值,解包赋值

直接赋值

a = 3
print(a)

链式赋值

a=b=c= 20
print(a,b,c) # 20 20 20

参数赋值

a=10
a+=5
print(a)# 15
a-=5
print(a)# 10
a*=5
print(a)# 50
a/=5
print(a)# 10.0
a//=5
print(a)# 2.0
a%=5
print(a)# 2.0

解包赋值,按照顺序赋值

a,b,c = 10,20,30 
print(a,b,c) # 10 20 30
a,b = b,a
print(a,b)# 20 10

比较运算符

比较运算符是一类给变量的大小、真假进行判断的运算符,返回布尔类型数据

a,b = 10,20
print(a>b)#False
print(a>=b)#False
print(a>=b)#False
print(a>=b)#False
print(a<=b)#True
print(a<b)#True
print(a==b)#False
print(a!=b)#True

== 和 is

判断变量是否同有两种方式,一种是==,另一种是is
== 是对变量的值进行比较
is 和 is not 是针对变量的地址,也就是id进行比较

a = 10
b = 10
print(a==b,id(a),id(b)) #True 140732815369288 140732815369288
print(a is b,id(a),id(b)) #True 140732815369288 140732815369288
a = [1,2,3]
b = [1,2,3]
print(a==b,id(a),id(b)) # True 2014458369216 2014460169280
print(a is b,id(a),id(b)) # False 2014458369216 2014460169280
print(a is not b,id(a),id(b)) # True 2014458369216 2014460169280

in 与 not in

in判断一个变量是否在另一个变量集合中,这个变量集合其实就是数组(字符串可当作字符数组)
in 与 not in 正好相反,判断一个变量是否不在另一个变量集合中

list = [1,2,3,4]#这是一个数组
print(1 in (1,2,3))#True
print(5 in list)#False
print(1 not in [1,2,3])#False
print(8 not in [1,2,3])#True

布尔运算符(逻辑运算符)

对布尔类型数据进行计算的运算符是布尔运算符,返回值也是布尔类型的值
都有and、or、not 分别对应着与、或、非,运算逻辑不多展示。

print(True and False) # False
print(True and True) # True
print(True or False) # True
print(False or False) # False

print(not True) # False
print(not False) # True

位运算符

python中的位运算符有 &(与)、|(或) 、<<(左移运算)、>>(右移运算)

print(4 & 3) # 按位相与:0
print(4 | 3) # 按位相或:7
print(129 << 1) # 4左移1位,逻辑左移:258
print(4 >> 1) # 8又移2位,逻辑右移:2
print(255 >> 2) # 逻辑右移:63

运算符的优先级

算数符的优先级
小括号>算术运算>位运算>比较运算符>布尔运算符>赋值运算符(=)
** > (*,/,//,%) > (+,-) > (<<,>>,&,|) > (>,<,==,>=,<=.is,is not,in) > (and,or,not) > (=)

 a = 2**2 * 3 + 1 > 1 << 4 and True
b = 2**2 * 3 + 1
c = 1 << 4
print(a)# False
print(b)# 13
print(c)# 16

第三章

在这里插入图片描述
程序的运行结构分为三种,顺序结构,选择结构,循环结构

顺序结构

顺序结构就是程序由上到下,由左到右依次执行。

print("开始把大象放入冰箱")
print("1-打开冰箱")
print("2-把大象放进冰箱")
print("3-关闭冰箱")
print("结束")
"""输出结果
开始把大象放入冰箱
1-打开冰箱
2-把大象放进冰箱
3-关闭冰箱
结束
"""

对象的布尔值

在python中,任何东西都是对象,所有的对象都有一个对应的布尔值,可以通过内置函数bool()来获取对象的布尔值
除了以下几个对象的布尔值是False,其他对象的布尔值都是True
False,0,0.0,“”,‘’,None,空列表[],list(),空元组(),tuple(),空字典{},disc(),空集合set()

# 以下输出返回值全是False
print(bool(False)) # False
print(bool(0)) # 零
print(bool(0.0))# 零点零
print(bool(""))# 空字符串
print(bool(None))# 空对象
print(bool([]))# 空列表
print(bool(list()))# 空列表
print(bool(()))# 空元组
print(bool(tuple()))# 空元组
print(bool({}))# 空字典
print(bool(dict()))# 空字典
print(bool(set()))# 空集合

单分支结构

介绍

单分支结构就是,如果满足某个条件,就做某件事

语法

if 布尔表达式:
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事

例如

money = 2000000
if money > 114514: #注意这里有个冒号
    print("土豪啊")

双分支结构

介绍

双分支结构就是,如果满足某个条件,就做某件事,否则就做另一件事

语法

if 布尔表达式:
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
else:
缩进(一般是4格)另一件事
缩进(一般是4格)另一件事
缩进(一般是4格)另一件事

例如

height = 190;
if height >= 180:
    print("长得真高啊")
else:
    print("长的真低啊")

多分支结构

介绍

如果满足某个条件,就执行某件事,如果不满足,否则,如果满足另一个条件,就执行另一件事,否则…,最后所有条件都不满足,执行某一件事。

语法

if 布尔表达式1:
代码1
elif 布尔表达式2:
代码2
elif 布尔表达式3:
代码3
… …
else:
代码n

例如

if 100 <= score >= 90:
    print("真厉害,不愧是我的儿子")
elif score >= 80:
    print("这回考得不错")
elif score >= 70:
    print("正常发挥,还行")
elif score >= 60:
    print("这回考的不行,给你一个大比兜")
elif 0 <= score < 60:
    print("龟孙贼,来来来,看你能不能看到明天的太阳!")
else:
    print("这逼老师,瞎几把判的分吧")

嵌套分支

分支结构是可以嵌套的,分支结构里面也可以写分支结构

在这里插入图片描述
例如

money = int(input("消费金额:"))
haveCard = input("是否有会员卡(y/n):")
if haveCard == "y":
    if money >= 200:
        print("打8折,消费:", money * 0.8, "元")
    elif money >= 100:
        print("打9折,消费:", money * 0.9, "元")
    else:
        print("不打折,消费:", money, "元")
else:
    if money >= 100:
        print("打九五折,消费:", money * 0.95, "元")
    else:
        print("不打折,消费:", money, "元")

三元表达式

条件表达式是一个表达式,是表达式它返回的就是一个值
他会根据条件的不同返回两个不同的值

语法
值1 if 条件表达式 else 值2 # 如果布尔表达式为True,返回值1,否则返回值2

a = 10
b = 20
print("a>b" if a > b else "a<=b")

pass语句

pass代表空语句,当我们在一个地方必须要代码,否则会报错的时候,我们可以暂时用pass来代替

if True:
#这个地方必须写代码,否则会报错
else:
#这个地方必须写代码,否则会报错
# 这样就不会报错了
if True:
	pass
else:
	pass

内置函数range()

range返回一个range类型的对象,range对象可以通过list函数转换成一个数组
根据参数的不同返回的集合也不同
range(int a) # a代表返回从0到a-1的一个数组,每个数之间的间隔为1
range(int a,int b) # a代表返回从a到b-1的一个数组,每个数之间的间隔为1
range(int a, int b, int c) # a代表返回从a到b-1的一个数组,每个数之间的间隔为c

r = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))
r = range(2, 10) # [2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))
r = range(2, 7, 2) # [0, 2, 4, 6, 8]
print(3 in r) # False
print(4 in r) # True
print(5 not in r) # True

注意:range()函数返回的只是一个range类型的对象,并不是一个数组,因此在内存中占空间是比较小的,当使用list()函数将其转换成一个数组后,他才是一个真正的数组。

循环

py中循环分为两类,while循环和for-in循环
在这里插入图片描述

while循环

语法

while 条件表达式:
	循环体

示例1:依次输出0-10

a = 1
while a <= 10: # 当a>10的时候就会退出循环
    print(a)
    a += 1 # a自增1

示例2:1到100的偶数和

a = 1
result = 0;
while a <= 100:
    if a % 2 == 0:
        result += a
    a += 1
print(result)

for-in循环

for-in循环又称为遍历,把一个数组或者集合的对象都拿出来,做相关操作

语法

for 变量 in 可迭代的对象:
	循环体

执行图
在这里插入图片描述
示例

list = [1, 2, 4, 3, 4]
for item in list:
    print(item)

如果循环体不需要访问变量,则可以将变量改为下划线 _

# 说十次你好
for _ in range(10):
    print("你好")

练习:返回水仙花数(水仙花数,也被称为阿姆斯特朗数,是一个三位数,其各个数字的立方和等于它本身)

#方法一(单个循环)
for i in range(100,1000):
    bai = int(i / 100)
    shi = int((i / 10) % 10)
    ge = i % 10
    if bai**3 + shi**3 + ge**3 == i:
        print(i)
# 方法二(循环嵌套)
for i in range(1, 10):
    for j in range(0, 10):
        for k in range(0, 10):
            if i**3 + j**3 + k**3 == i*100 + j*10 + k*1:
                print(str(i)+str(j)+str(k))

练习:输出九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        if j == i:
            print(j, "*", i, "=", j * i)
        else:
            print(j, "*", i, "=", j * i, end="   ")

break

break是一个结束循环的语句。在循环过程中,如果发生某种情况,我们想立刻结束整个循环,我们可以使用break保留字

示例:当用户输入正确密码时,结束循环

i = 0
password = "114514"
while i < 3:
    i += 1
    pwd = input("请输入你的密码:")
    if pwd == password:
        print("密码正确")
        break
    else:
        print("密码错误")

continue

continue适用于结束当前的循环,直接开始下一个循环。continue通常和if语句一同使用

示例

moneys = [80,20,90,110,30,300]
for money in moneys:
    if money >= 100:
        print("打九折,消费:", money * 0.9)
        continue # 当金钱大于等于100时,打九折,然后处理下一个人的消费
    print("不打折,消费:", money)

和循环搭配之用的else

不同于其他语言,python中while循环、for循环可以和else搭配使用。
在循环结束后,如果整个循环没有被break打断,那么执行else语句中的代码

语法

while/for循环:
	循环语句
else:
	代码

示例:还是输入密码的问题,如果整个循环没有被break打断,证明用户密码输入三次都不正确。

i = 0
password = "114514"
while i < 3:
    i += 1
    pwd = input("请输入你的密码:")
    if pwd == password:
        print("密码正确")
        break
    else:
        print("密码错误")
else:
    print("嘤嘤嘤,密码都输错三次了,不能再输了耶!(。♥‿♥。)")

其实,这种else语法是可以被代替的,只需要在循环外加一个变量即可

i = 0
password = "114514"
flag = False #加一个变量
while i < 3:
    i += 1
    pwd = input("请输入你的密码:")
    if pwd == password:
        print("密码正确")
        flag = True #当密码正确时,变为True
        break
    else:
        print("密码错误")
if not flag: # 循环结束后判断密码是否输入正确
    print("嘤嘤嘤,密码都输错三次了,不能再输了耶!(。♥‿♥。)")

嵌套循环中的break和continue

在嵌套循环中,break和continue只会作用于本层循环,不会作用于外层循环。

示例:内层循环会跳过3,到7时就会结束内存循环,但外层循环不会结束。外层循环到11就会结束,自然内层循环不会继续执行。

for i in range(1, 20):
    if i == 11:
        break
    print("外层循环i=", i)
    for j in range(i + 1):
        if j == 3:
            continue
        elif j == 7:
            break
        print("\t\t内层循环j=", j)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dSYM文件是什么 ?

Overview 概述 dSYM的全称是debug symbol, 所以dSYM文件就是debug symbol (dSYM) file, dSYM文件中的每个 debug symbol, 对应了一个关系, 这个关系一端是源代码里真实的符号(类名称、全局变量以及方法和函数名称), 另一端则是其定义的文件号和行号. Apple Documentation 苹果…

word批量替换时使用通配符

替换这个好操作&#xff0c;打开替换功能&#xff1a; 弹出窗口中分别输入要替换的对象和替换的结果&#xff1a; 这里主要介绍特殊的替换&#xff1a; 可以看到点击“更多”之后&#xff0c;会出现下面的选项 像是【区分大小写】、【全字匹配】、【同音】、【查找单词的所有形…

三张表学会MySQL的单表操作!

表单一信息 1、查询表中所有学生的信息 mysql> select * from student; 2、 查询表中所有学生的姓名和英语成绩 mysql> select name,english from student; 3、过滤表中的重复数据 mysql> select DISTINCT * from student; 4、统计每个学生的总分 mysql> sele…

大语言模型高效训练基础知识:优化器AdamW和Adafator

Prerequsite:Adam优化算法 Adam优化算法很长一段时间都是比较主流的参数更新算法&#xff0c;也有很多变种&#xff0c;本文介绍在大模型训练过程中使用的AdamW和Adafator AdamW 原论文&#xff1a;Decoupled Weight Decay Regularization AdamW指的是Adam Weight Decay&#…

Mysql中默认自动事务autocommit关闭和开启方式、rollback回滚恢复数据的使用方法

文章目录 autocommit自动提交事物一、查看autocommit状态二、修改autocommit 状态的方式1、第一种方式2、修改mysql配置文件my.cnf 二、rollback回滚1、autocommit 开启1、autocommit 关闭 autocommit自动提交事物 MySQL 默认开启事务自动提交模式&#xff0c;每条 SOL 语句都…

深度神经网络知识蒸馏算法基础理论

知识蒸馏作为一种压缩方法&#xff0c;与剪枝、量化中直接在原模型上进行参数的剪枝或数据位宽的降低来压缩不同&#xff0c;知识蒸馏方法往往是通过将大模型上的精度转移到一个相对更小的模型上来完成对大模型的压缩。此处所说的大模型即知识蒸馏中的教师模型&#xff0c;而相…

【C语言】深入学习数组

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在回炉重造C语言&#xff08;2023暑假&#xff09; ✈️专栏&#xff1a;【C语言航路】 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你…

进程间通信方法——匿名管道

什么是管道&#xff1f; 管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 什么是匿名管道 就是一个没有名字的管道。 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd&#xff1a;文…

韩信谋反解密-使用命名空间

开机故事&#xff1a; 另一个韩信 什么是命名空间 c里面也有这种困扰&#xff0c;名字的冲突&#xff0c; 特意使用命名空间&#xff0c;开发的时候都要给函数命名 就会有名字相同的时候。这样就会出现混乱 区分相同名字相同函数的这样一个功能 用法1. #include<string…

openGauss学习笔记-04 openGauss极简版单机主备安装部署

文章目录 openGauss学习笔记-04 openGauss极简版单机主备安装部署4.1 获取安装包4.1.1 下载对应平台的安装包4.1.2 解压安装包4.1.3 查看目录结构 4.2 准备软硬件安装环境4.2.1 硬件环境要求4.2.2 软件环境要求4.2.3 软件依赖要求 4.3 单机主备安装部署4.3.1 安装前准备4.3.2 单…

【网络安全带你练爬虫-100练】第11练:xpath快速定位提取数据

目录 一、目标1&#xff1a;使用etree解析数据 二、目标2&#xff1a;使用xpath爬取指定数据 三、目标3&#xff1a;提取指定数据 四、网络安全小圈子 一、目标1&#xff1a;使用etree解析数据 其余的不用过多介绍&#xff0c;前面的练习都给大家已经过了一遍 def get_page…

【沐风老师】3DMAX砖石墙地面生成工具插件使用方法详解

3dMax砖石墙地面生成工具插件&#xff0c;收集了一些用于创建石墙、石头路面和不规则石头图案的实用工具&#xff0c;以模拟墙壁和地面。脚本会自动烘焙法线贴图、AO贴图和高度贴图以供实时使用。 【主要特点】 1.可以生成真实的石墙、地面、不规则石块及石灰墙面&#xff0c;是…

4.5 x64dbg 探索钩子劫持技术

钩子劫持技术是计算机编程中的一种技术&#xff0c;它们可以让开发者拦截系统函数或应用程序函数的调用&#xff0c;并在函数调用前或调用后执行自定义代码&#xff0c;钩子劫持技术通常用于病毒和恶意软件&#xff0c;也可以让开发者扩展或修改系统函数的功能&#xff0c;从而…

oracle启动/关闭/查看监听+启动/关闭/查看数据库实例命令

启动oracle第一步启动监听&#xff0c;第二步启动数据库实例 &#xff08;1&#xff09;输入su oracle进入oracle用户状态 &#xff08;2&#xff09;这里的密码是你的root密码 1 启动/关闭/查看监听命令 &#xff08;1&#xff09;启动监听—— lsnrctl start &am…

C#学习之路-封装

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中&#xff0c;封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化&#xff0c;封装则使开发者实现所需级别的抽象。 C…

编码和调制

编码与调制 消息是以二进制的形式存放在数据当中的&#xff0c;这种数据的表现形式是信号&#xff0c;而信源发出的原始信号就叫做基带信号&#xff0c;基带信号又可以分为数字基带信号和模拟基带信号。 信号需要在信道中进行传输&#xff0c;信道分为模拟信道和数字信…

libdrm编译调试

本文主要介绍libdrm的代码下载、编译和调试的工作。新版本的libdrm不再采用configure && make的方式编译&#xff0c;而是改用meson && ninja编译方式&#xff0c;近些年很多多媒体的开源软件包的构建系统有向后者靠拢的趋势&#xff0c;典型的比如gstream及其…

16、SQL注入之查询方式及报错盲注

目录 前言SQL注入报错盲注补充: Access暴力猜解不出的问题? 前言 当进行SQL注入时&#xff0c;有很多注入会出现无回显的情况&#xff0c;其中不回显的原因可能是SQL语句查询方式的问题导致&#xff0c;这个时候我们需要用到相关的报错或盲注进行后续操作&#xff0c;同时作为…

进程间通信的介绍

目录 进程间通信的目的 进程间通信发展 进程间通信分类 进程间通信的分析 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&a…

PWM+RC 滤波的DAC 输出的数学理论

PWM示意图 PWM 本质上其实就是一种周期一定&#xff0c;占空比可调的方波。典型PWM 波形如下 图所示&#xff1a; PWM分段函数 图中的PWM 波形可以用如下分段函数表示&#xff1a; 函数中&#xff1a;T 是单片机中计数脉冲的基本周期&#xff0c;也就是STM32F4 定时器的计数频率…