二、基础—常用数据结构:列表、元祖、集合、字典、函数等(爬虫及数据可视化)

news2024/10/6 7:12:28

二、基础—常用数据结构:列表、元祖、集合、字典、函数等(爬虫及数据可视化)

  • 1,字符串
  • 2,最常用的是列表(重点掌握)
  • 3,元组
  • 4,字典(重要)
  • 5,集合
  • 6,函数(重要)

1,字符串

字符串,截取,连接,输出,重复打印直接*r等原始字符不变
做数据处理时,大部分都是以字符串存在的
有很多的库等,字符串的截取等操作
在python中所有代码默认是UTF-8
日常还是建议使用双引号,比较常用
转义字符关注一些即可,如想要输入一个斜杠\,需要\\
在网络爬虫时,可能爬取的文档内容包含一些单引号或双引号等,需要进行转义再进行数据库的存储和显示,否则会出现问题

\\
\’
\”
\n
\t

当爬虫时爬取的文本很长,需要将一些文字截取出来,有一个函数str可以做列表的方式访问

print(r'hello\npython') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义

在后面爬虫会经常用到r,所有的\等不进行解释直接输出,将别人爬取出的文字内容,最好在前面加个r这样中间的内容全部保存下来,显示到网页也是可以保存原来的格式的

str='chengdu' 
print(str) # 输出字符串 
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符 
print(str[0]) # 输出字符串第一个字符 
print(str[2:5]) # 输出从第三个开始到第五个的字符 
print(str[2:]) # 输出从第三个开始后的所有字符 
print(str * 2) # 输出字符串两次 
print(str + '你好') # 连接字符串 
print(str[:5]) # 输出第五个字母前的所有字符 
print(str[0:7:2]) # [起始:终止:步长] 
print('------------------------------') 
print('hello\nchengdu') # 使用反斜杠(\)+n转义特殊字符 
print(r'hello\npython') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义

字符串常见操作:
isdigit() 等可以判断是否是一个数字
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
lstrip() 截掉字符串左边的空格或指定字符。去除空格等在爬虫时经常用,有些文字有空格,需要去掉再进行存储,有利于计算
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回False
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串

2,最常用的是列表(重点掌握)

列表、元组、字典、集合

列表的使用非常像数组,但不同在于里面的类型可以是不同的

很多爬虫爬取的数据都会在内存中存一下,梳理好后再放到数据库中

学数据结构或者数据库本质在讨论如何高效的管理数据

数组、列表等都是如何对数据进行增删改查、排序等
无论作业,还是爬虫3.2.3的常用操作都会用到

具体使用场景,如在数据库查出了一堆数据,希望排好顺序,不希望再次查询数据库,只希望将页面上存在的内容进行升序降序,可以不用在访问数据库,直接内存操作即可

#-*- codeing = utf-8 -*- 
#@Time : 2020/11/18 18:59
#@Author : 招财进宝
#@File : demo2.py
#@Software: PyCharm

namelist =["小王","小李","小张"]
'''
namelist =["小王","小李","小张"]
print(namelist[0])
print(namelist[1])
print(namelist[2])

namelist =[1,"小李"]
print(namelist[0])
print(type(namelist[0]))
print(namelist[1])
print(type(namelist[1]))
'''

'''
namelist =[1,"小王","小李","小张"]
for name in namelist:                   #此种方法常用需要学会使用
    print(name)


#while代码可能多一点,使用的是下标,但有些时候我们需要使用下标和其他的结合的
length=len(namelist)
i=0
while i<length:
    print(namelist[i])
    i+=1
'''

'''
print("-----增加前,名单列表的数据----")
for name in namelist:
    print(name)

#append  增加
nametemp = input("please input name:")
namelist.append(nametemp)

print("-----增加后,名单列表的数据----")
for name in namelist:
    print(name)
'''

'''
a=[1,2]
b=[3,4]
a.append(b)         #会将b列表作为一个整体元素放倒a列表中,形成了列表的嵌套
print(a)

a.extend(b)         #会将b列表中的每个元素,逐一追加到列表中
print(a)
'''

'''
#增:  [insert]插入
a =[0,1,2]
a.insert(1,3)       #第一个变量表示下标,第二个表示元素(对象)
print(a)            #指定下标位置插入元素
'''

'''
#删  [del] [pop]

movieName = ["加勒比海盗","海尔客帝国","第一滴血","指环王","速度与激情"]
print("-----删除前,名单列表的数据----")
for name in movieName:
    print(name)

#del movieName[1]       # 在指定位置删除一个元素
#movieName.pop()         #弹出末尾最后一个元素
movieName.remove("指环王")     #直接删除指定内容的元素(当有两个重复数据时,删除的是找到的第一个元素)

print("-----删除后,名单列表的数据----")
for name in movieName:
    print(name)
'''

'''
#改:
print("-----增加前,名单列表的数据----")
for name in namelist:
    print(name)

namelist[1]="小红"        #修改指定下标的元素内容

print("-----增加后,名单列表的数据----")
for name in namelist:
    print(name)
'''

'''
#查:不是搜索,主要是判断元素是否在列表中【in ,not in】

findName = input("请输入你要查找的学生姓名:")

if findName in namelist:                        #不是for in循环,而是if判断某个元素在列表中
    print("在列表中找到了学生的名字")
else:
    print("没有找到")
'''

'''
# 查 查找指定下标范围的元素并返回对应数据的下标
mylist=["a","b","c","a","b"]

mylist.index("a",1,4)            #查询元素“a”是否在第1到4的位置上出现(不包含4),范围区间左闭合,右断开【1,4)
print(mylist.index("a",1,4) )    #能将查到的下标得到

print(mylist.count("c"))        #统计某个元素出现几次
'''

'''
#具体使用场景,如在数据库查出了一堆数据,希望排好顺序,不希望再次查询数据库,只希望将页面上存在的内容进行升序降序,可以不用在访问数据库,直接内存操作即可
a=[1,4,2,3]
print(a)
a.reverse()                 #将列表所有元素反转
print(a)
a.sort()                 #升序,将列表所有元素从低到高排序
print(a)
a.sort(reverse=True)          #降序,将列表所有元素从高到低排序
print(a)
'''

schoolNames = [[],[],[]]        #有三个元素的空列表,每个元素都是一个空列表

#嵌套的列表大学可以不同
schoolName = [["北京大学","清华大学"],["南开大学","田径大学","田径师范大学"],["山东大学","中国海洋大学"]]

print(schoolName[0])
print(schoolName[0][0])


#3个办公室,8个老师,随机将其分配到教师
import random
offices=[[],[],[]]
names = ["A","B","C","D","E","F","G","H"]

for name in names:
    index = random.randint(0,2)     #[0,2]
    offices[index].append(name)

i=1
for office in offices:          #遍历得到每个办公室
    print("办公室%d的人数:%d"%(i,len(office)))
    i+=1
    for name in office:         #遍历得到每个办公室的人名
        print("%s"%name,end="\t")
    print("\n")
    print("-"*20)

嵌套、追加、len、双层for循环等

作业:商品(重要必看)
在这里插入图片描述

你所购买的商品有:
共几件,总价是

#作业   打印商品列表
products = [["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]

'''
#for productIndex in len(products):
i = 0
for product in products:
    print(i,end="\t")
    for col in product:
        print(col,end="\t")
    print("")
    i+=1
'''

buyProducts = []
while True:
    #用于循环输出商品
    for i,product in enumerate(products):       #使用枚举函数enumerate()可以同时拿到列表的下标和元素内容
        print(i, end="\t")
    for col in product:
        print(col, end="\t")
    print("")


    indexStr = input("想要买什么商品,请选择商品编号:")
    #判断输入的是否为数字
    if indexStr.isnumeric():                   #判断字符串是否为数字字符isnumeric()
        pass                                #主要用来占位,无任何操作
    else:
        print("请输入数字")
        continue                            #进入下一循环,或者break

    #判断输入的数字是否在编号内
    index = int(indexStr)
    if (index>0 and index<len(products)):
        pass
    else:
        continue

    #此处是在尾后追加
    tempProduct=[]
    tempProduct.append(index)                       #将整体元素追加
    tempProduct.extend(products[index])             #将列表中的元素追加
    buyProducts.append(tempProduct)                 #【【1,MacPro,14800】】得到类似此的列表

    #判断是否退出
    isQ=input("是否退出(退出q/继续y):")
    if isQ=="q":
        break

#退出后打印保存的商品信息
sumMoney=0
print("你所购买的商品有如下:")
for product in buyProducts:
    sumMoney+=product[len(product)-1]
    for col in product:
        print(col, end="\t")
    print("")
    i += 1

print("共%d件,总价是%d。"%(len(buyProducts),sumMoney))

3,元组

元组并不是很重要的简单看看即可

主要看课件
Tuple 中元素不能修改,写法也不同,小括号

定义tuple类型时,需要使用“,”隔开 如 t1=(1,)
否则会将t1认为是1的类型,而不是元组的类型

元组的操作可查看课件

#-*- codeing = utf-8 -*- 
#@Time : 2020/11/19 9:39
#@Author : 招财进宝
#@File : demo3.py
#@Software: PyCharm

#此章节主要是元组

'''
tup1 = ()       #创建空的元组
print(type(tup1))           #tup类型<class 'tuple'>

tup2 = (50)     #当只有一个数据时,不是元组类型,而是整型的<class 'int'>
print(type(tup2))

tup3 = (50,)     #在数据后面加入“,”就是元组的类型了
print(type(tup3))

tup3 = (50,)     #在数据后面加入“,”就是元组的类型了
print(type(tup3))
'''

'''
tup1 = ("abc","def",2000,2000,333,444,555)

print(tup1[0])
print(tup1[-1])         #-1表示最后一个
print(tup1[1:5])        #切片,左闭合,右开放
'''

#增
#表面上是增加的过程,实际没有修改,而是连接了
'''
tup1 = (1,2,3)
tup2 = ("abc","def")

tup = tup1+tup2
print(tup)
'''

#删
tup1 = (1,2,3)
print(tup1)
del tup1          #删除整个元组变量,而不是删除其中某个元素
print("删除后:")
print(tup1)         #会报错,无定义,前面讲元组变量删除了

#改
tup1 = (1,2,3)
#tup1[0]=100   报错不能修改

#查

4,字典(重要)

字典存储的是键值对(重点)
为了保证想要查询一个键时能快速找到一个值的功能而涉及的

字典中前面的键必须唯一,值可以重复
键必须是不可变的类型,一旦存入,不得更改

字典的定义如下,有键有值,形成键值对

info = {"name":"吴彦祖","age":18}
#-*- codeing = utf-8 -*- 
#@Time : 2020/11/19 10:18
#@Author : 招财进宝
#@File : demo4.py
#@Software: PyCharm


#此处主要是字典

'''
#字典的定义
info = {"name":"吴彦祖","age":18}

#字典的访问(通过键找值)
print(info["name"])             #直接访问
print(info["age"])
print(info.get("name"))         #get寻找,无找到会返回none

#访问了不存在的键
#print(info["gender"])       直接访问,会报错

print(info.get("gender"))       #使用get方法,没有找到对应的键,默认返回None
print(info.get("gender","m"))       #没找到的时候,可以设定默认值
print(info.get("age","m"))          #找到了默认值不生效
'''


#字典也是一个数据结构,也需要增删改查

#增
'''
info = {"name":"吴彦祖","age":18}
newID = input("please input newID:")
info["id"] = newID

print(info)
'''

#删
# del 删
'''
info = {"name":"吴彦祖","age":18}
print("删除前:",info)

#删除键值对后,再直接访问不存在的键会报错,可以get寻找
del info["name"]                        #此处不仅删除键的值,连键也删除了
print("删除后:",info)
'''

'''
info = {"name":"吴彦祖","age":18}
print("删除前:%s"%info)                #此种写法也可以

#删除键值对后,再直接访问不存在的键会报错,可以get寻找
del info                       #直接将字典删除了,字典变量从内存中清除了
print("删除后:%s"%info)
'''
#clear 清空(清空字典内的数据,是字典为空,而不是将整个字典删除)
'''
info = {"name":"吴彦祖","age":18}
print("清空前:%s"%info)                #此种写法也可以

#删除键值对后,再直接访问不存在的键会报错,可以get寻找
info.clear()                       #直接将字典删除了,字典变量从内存中清除了
print("清空后:%s"%info)
print(type(info))                   #<class 'dict'>
'''

#改
'''
info = {"name":"吴彦祖","age":18}

#直接通过键访问
info["age"]=20
print(info["age"])
'''

#查
'''
info = {"id":1,"name":"吴彦祖","age":18}
print(info.keys())          #得到所有的键(列表形式),若对单个键进行操作,可以对列表的方式操作即可dict_keys(['id', 'name', 'age'])
print(info.values())        #得到所有的值dict_values([1, '吴彦祖', 18])

print(info.items())        #得到所有的项(列表),每个键值对是一个元组dict_items([('id', 1), ('name', '吴彦祖'), ('age', 18)])

#遍历所有的键
for key in info.keys():
    print(key)

#遍历所有的值
for value in info.values():
    print(value)

#遍历所有的键值对
for key,value in info.items():      #会自动将项中元组的元素赋值给key和value
    print("key=%s,value=%s"%(key,value))
'''

mylist = ["a","b","c","d"]

for x in mylist:        #此处可以拿到每个元素
    print(x)
#但我们既想拿到元素,又想拿到下标,怎么办

#可以使用枚举函数,能同时拿到列表中的下标和元素内容
for i,x in enumerate(mylist):        #此处可以拿到每个元素
    print(i,x)

5,集合

集合不是重点
简单过一下

仅仅是键集合
在集合只有键没有值,可以用于去重的作用

6,函数(重要)

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独 立功能的代码块组织为一个小模块,这就是函数。

课堂练习:
1.写一个打印一条横线的函数。(提示:横线是若干个“-”组成)
2.写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
3.写一个函数求三个数的和
4.写一个函数求三个数的平均值(提示:调用上面的函数)
【建议每题5分钟以内】

#-*- codeing = utf-8 -*- 
#@Time : 2020/11/19 14:21
#@Author : 招财进宝
#@File : demo1.py
#@Software: PyCharm

#函数

'''
#函数的定义(不会被执行)
def printinfo():
    print('------------------------------------')
    print(' 人生苦短,我用Python')
    print('------------------------------------')

#函数的调用
printinfo()
'''

'''
#带参数的函数
def add2Num(a,b):
    c=a+b
    print(c)

add2Num(1,2)
'''

'''
#带返回值的函数
def add2Num(a,b):
    return a+b          #通过return来返回运算结果

result = add2Num(11,12)
print(result)
'''

'''
#返回多个值的函数(需要使用多个值接收)
def divid(a,b):
    shang = a/b
    yushu = a%b
    return shang,yushu          #多个返回值用逗号隔开

sh,yu=divid(5,2)                #需要使用多个值来保存内容
print("商:%d,余数:%d"%(sh,yu))
'''


# 课堂练习:
# 1.写一个打印一条横线的函数。(提示:横线是若干个“-”组成)
# 2.写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
# 3.写一个函数求三个数的和
# 4.写一个函数求三个数的平均值(提示:调用上面的函数)
'''
#以下是自己编写的
def printH():
    print("-"*10)

def printHNum(a):
    for i in range(a):
        printH()

def sumThree(a,b,c):
    return a+b+c

def evThree(a,b,c):
    ev = sumThree(a, b, c)/3
    return ev

printH()
printHNum(3)
print(sumThree(1,2,3))
print(evThree(1,2,3))
'''

'''
#下方为练习的答案
# 打印一条横线
def printOneLine():
    print("-"*30)
# 打印多条横线
def printNumLine(num):
    i=0
# 因为printOneLine函数已经完成了打印横线的功能,
# 只需要多次调用此函数即可
    while i<num:
        printOneLine()
        i+=1

printNumLine(3)

# 求3个数的和
def sum3Number(a,b,c):
    return a+b+c # return 的后面可以是数值,也可是一个表达式
# 完成对3个数求平均值
def average3Number(a,b,c):
# 因为sum3Number函数已经完成了3个数的就和,所以只需调用即可
# 即把接收到的3个数,当做实参传递即可
    sumResult = sum3Number(a,b,c)
    aveResult = sumResult/3.0
    return aveResult
# 调用函数,完成对3个数求平均值
result = average3Number(11,2,55)
print("average is %d"%result)
'''

#全局变量和局部变量
'''
#局部变量(出了函数之后就无效了,不会相互影响)
def test1():
    a=300               #局部变量
    print("test1---修改前:a=%d"%a)
    a = 100
    print("test1---修改后:a=%d" % a)

def test2():
    a=500               #不同的函数可以定义相同的名字,彼此无关
    print("test2---:a=%d" % a)

test1()
test2()
'''

'''
a=100   #全局变量

def test1():
    print("test1---:a=%d" % a)

def test2():
    print("test2---:a=%d" % a)      #调用全局变量a

test1()
test2()
'''

'''
#全局变量和局部变量名称相同
a=100   #全局变量
def test1():
    a=300               #局部变量优先使用(test1修改的是自己的变量)
    print("test1---修改前:a=%d"%a)
    a = 200
    print("test1---修改后:a=%d" % a)

def test2():
    print("test2---:a=%d" % a)      #没有局部变量,默认使用全局变量

test1()
test2()
'''

#若就想在函数内访问全局变量,并在函数中将全局变量修改
#需要在局部变量声明一下
a=100   #全局变量

def test1():
    global a              #声明全局变量在函数中的标识符
    print("test1---修改前:a=%d"%a)
    a = 200
    print("test1---修改后:a=%d" % a)

def test2():
    print("test2---:a=%d" % a)      #没有局部变量,默认使用全局变量

test1()
test2()
result = average3Number(11,2,55) 
print("average is %d"%result)

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

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

相关文章

卫星IoT产品发展前景

卫星IoT产品发展前景 一、概述 卫星IoT产品是指利用卫星通信技术实现物联网设备互联互通的解决方案。随着卫星互联网技术的快速发展&#xff0c;卫星IoT产品正逐渐成为解决偏远地区、海洋、航空等场景下物联网连接问题的重要手段。 二、性能特点 广泛覆盖&#xff1a; 卫星…

搜维尔科技:如何使用 SenseGlove Nova 加速手部运动功能的恢复

District XR 的VR 培训 5 年多来&#xff0c;District XR 一直在为最大的工业公司创建 VR 和 AR 项目。 客户&#xff1a;District XR 客户代表&#xff1a;尼古拉沃尔科夫 他的角色&#xff1a;District XR 首席执行官 面临解决的挑战 该公司正在寻找一种方法来加速身体伤…

k8s离线安装安装skywalking9.4

目录 概述资源下载Skywalking功能介绍成果速览实践rbacoapoap-svcuiui-svc 结束 概述 k8s 离线安装安装 skywalking9.4 版本&#xff0c;环境&#xff1a;k8s版本为&#xff1a;1.27.x 、spring boot 2.7.x spring cloud &#xff1a;2021.0.5 、spring.cloud.alibab&#xff1…

搜维尔科技:【研究】Scalefit人体工程学测量系统为预防肌肉骨骼疾病提供生物力学分析

与工作相关的肌肉骨骼疾病(MSE)是工作生活中的一个持续的伴侣。总部位于科隆的Scaleit公司生产的移动生物力学测量系统Industrial Athlete有助于在工作场所立即发现疾病&#xff0c;伤害和损伤的原因。 Scalefit是一个跨学科网络的一部分&#xff0c;在德国科隆体育大学和职业…

Linux手动安装JDK1.8

1、下载要安装的jdk安装包文件 官网下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 2、上传jdk安装包至要安装服务器 3、在要安装jdk位置使用命令解压安装包 安装路径: /usr/local/java 解压安装包&#xff0c;解压命令 tar -zxvf /install…

2024攻防演练:亚信安全新一代WAF,关键时刻守护先锋

实网攻防 网络安全如同一面坚固的盾牌&#xff0c;保护着我们的信息资产免受无孔不入的威胁。而其中&#xff0c;WAF就像网络安全的守门员&#xff0c;关键时刻挺身而出&#xff0c;为您的企业筑起一道坚实的防线。 攻防不对等 防守方实时应答压力山大 在攻防对抗中&#xf…

字符设备驱动程序

简单做个模板框架 字符设备开发流程 确定设备号dev_t&#xff0c;动态分配 alloc_chrdev_region() 或静态分配 register_chrdev_region()定义file_opeartion 结构体*fops *&#xff0c;在结构体成员中实现对应的 *open()、read()*等函数。cdev_init() 将 fops 与 cdev 绑定&…

如何在 Selenium Python 中解决验证码 | 2024 完整指南

由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计&#xff0c;对于使用Selenium进行网络爬虫或自动化任务而言&#xff0c;无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案&#xff0c;帮助您高…

Mac本地部署大模型-单机运行

前些天在一台linux服务器&#xff08;8核&#xff0c;32G内存&#xff0c;无显卡&#xff09;使用ollama运行阿里通义千问Qwen1.5和Qwen2.0低参数版本大模型&#xff0c;Qwen2-1.5B可以运行&#xff0c;但是推理速度有些慢。 一直还没有尝试在macbook上运行测试大模型&#xf…

ARIES,数据恢复算法,万变不离其宗...

今天来聊两个问题&#xff1a; 1. 如果缓冲池&#xff08;buffer pool&#xff09;满了&#xff0c;哪些数据页&#xff08;page&#xff09;要刷盘&#xff0c;哪些数据页不刷盘&#xff1f; 2. 数据库崩了&#xff0c;怎么利用检查点&#xff08;checkpoint&#xff09;与预写…

MATLAB环境下4种噪声生成

生成噪声包括: 1)粉红色(闪烁)噪声-功率谱密度斜率-3 dB/oct。&#xff0c; - 10db /dec 2)红色(布朗)噪声-功率谱密度斜率-6 dB/oct。&#xff0c; - 20db /dec 3)蓝色噪声-功率谱密度斜率3 dB/oct。&#xff0c; 10db /dec 4)紫色(紫色)噪声-功率谱密度斜率 6db /oct。&…

鸿蒙如何打包应用程序

总结鸿蒙应用程序包 之前文章详细讲解了关于三种程序包的内容&#xff0c;现在简单总结一下&#xff1a; 1. 总结 首先需要搞清楚鸿蒙项目的模块Module的分类: Module分为“Ability”和“Library”两种类型 HAP HAP: Harmony Ability Package , 叫做鸿蒙Ability包。 “Abil…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

若依多数据源原理分析

首先&#xff0c;想明白不同的接口想要使用不同的数据源。 那么自然想到了AOP&#xff0c;自定义注解。 通过自定义注解标注当前方法到底使用的是哪个数据源。 上面是前置条件。 看下若依是怎么处理的&#xff1a; 1.定义自定义注解&#xff0c;以及对应的多数据源的枚举类…

p标签文本段落中因编辑器换行引起的空格问题完美解决方案

目录 1.修改前的代码&#xff1a;2.修改后的代码3.总结 在HTML文档中&#xff0c;如何要在&#xff08;p标签&#xff09;内写一段很长的文本段落&#xff0c;并且没有 换行。由于IDE或者编辑器界面大小有限或需要在vue中逻辑处理动态显示文本&#xff0c;一行写完太长&#x…

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木&#xff0c;我们可以构建出城堡、飞机、甚至整个城市。现在&#xff0c;想象一下如果有一个数字世界的乐高&#xff0c;我们可以用这样的“积木”来构建智能程序&#xff0c;这些程序能够阅读、理解和撰写文本&#xf…

在RT-Thread-Studio中添加arm_math库

1.在CMSIS\Lib\GCC中找到对应的库&#xff0c;如本文使用的libarm_cortexM4lf_math.a。将库拷贝到工程&#xff0c;并做如下图设置。搜索路径为库文件在项目中的实际位置。 2.将CMSIS\DSP\Include下的文件复制到工程目录中&#xff0c;并添加包含路径 3.添加宏定义&#xff0c…

【MySQL】MySQL 9.0悄悄的来了

MySQL 9.0.0 中的变化 MySQL 9.0 中的新功能 JavaScript 存储程序 MySQL 企业版现在支持用 JavaScript 编写的存储程序&#xff0c;例如使用 CREATE FUNCTION下面显示的语句和 JavaScript 代码创建的这个简单示例&#xff1a; CREATE FUNCTION gcd(a INT, b INT) RETURNS …

【PTGui、Pano2VR6、UE4】VR全景拍摄及漫游交互制作操作实例(更新中)

一、基本思路 首先进行VR全景拍摄&#xff0c;获取高质量的全景图像&#xff1b;然后使用PTGui进行图像拼接&#xff0c;确保图像的连续性与准确性&#xff1b;接着利用Pano2VR6进行VR漫游的制作&#xff0c;添加交互元素与多媒体内容&#xff1b;最后进行作品的调试与优化&am…