Python学习(二)—— 基础语法(上)

目录

一,表达式和常量和变量

1.1 表达式

1.2 变量

1.3 动态类型特性

1.4 输入

二,运算符

2.1 算术运算符

2.2 关系运算符

2.3 逻辑运算符

2.4 赋值运算符

2.5 练习

三,语句

3.1 条件语句

3.2 while循环

3.3 for循环

四,实践

4.1 设置初始属性

4.2 设置性别

 4.3 设置出生点

4.4 生成人生经历 

 4.5 完整代码


注:本系列是建立在已经完成C/C++ 的语法基础学习上的,所以只快速展示 Python 基本语法,基本看一遍就懂

一,表达式和常量和变量

1.1 表达式

我们可以把 Python 当场一个计算器来进行一些算术运算:

print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)

 

  • 形如 1 + 2 - 3 这样的算式,在编程语言中称为表达式;算式的运算结果称为表达式的返回值
  • 其中 1,2,3 这种称为 字面值常量,+ - * / 这种称为 运算符 或者 操作符
  • 第三个打印结果最后是665,为什么不是667呢?第三个结果我们称为浮点数,规则为 IEEE754 标准,在这套规则下,在内存中表示浮点数的时候, 可能会存在微小的误差

 示例:给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的平均数

print( (67.5 + 89.0 + 12.9 + 32.2) / 4 )

 

1.2 变量

Python 的变量在定义时,前面不带类型,直接就是:

a = 10

类似与C++定义变量时前面自带了auto,然后又把auto隐藏掉了;Python 的变量也遵守变量定义的基本规则

可以直接用print打印变量的值,也可以打印变量的类型:

a = 10
b = 0.5
c = 'hello'
print(a)
print(b)
print(c)
print(type(a))
print(type(b))
print(type(c))

 

除了上述类型之外,Python 中还有 bool,list,tuple,dict,自定义类型等等,我们后续再介绍

1.3 动态类型特性

在 Python 中,一个变量是什么类型,是可以在 "程序运行" 过程中发生变化的,这个特性称为 "动态类型" ,如下代码:

a = 10
print(f'a = {a}, type(a) = {type(a)}')
# 直接在代码中对a进行跨类型赋值
a = 'hello'
print(f'a = {a}, type(a) = {type(a)}')

  • C++/Java 这样的语言则不允许这样的操作,一个变量定义后类型就是固定的了,这种特性则称为 "静态类型"
  • 所以“动态特性”是Python 特有的

1.4 输入

C有scanf读取用户从键盘输入的值,C++有cin等,那么Python也有读取键盘输入数据的方法如下图:

a = input('请输入第一个数:')
b = input('请输入第二个数:')
print(f'a = {a}, type(a) = {type(a)}')
print(f'a = {b}, type(a) = {type(b)}')#注意,在Python中,读取到的键盘输入的值是字符串类型,要对数字进行计算需要转化下类型
a = int(a)
b = int(b)
print(f'a + b = {a + b}')

 

二,运算符

2.1 算术运算符

①首先是最基础的加减乘除取模:

print(10 + 20) #加法
print(10 - 20) #减法
print(10 * 20) #乘法
print(10 / 20) #除法
print(10 % 20) #取模

② 求乘方

在 C/C++中,求乘方操作一般由库函数来完成,但是Python针对求乘方设计了专门的运算符:

print(4 ** 2) #求4的2次方
print(4 ** 0.5) #也可以算小数次方

 

③取整除法 

整数除以整数,但是舍弃掉小数部分并向下取整,注意,是舍弃小数,不是四舍五入:

print(7 // 2) #结果为3.5,舍弃小数,结果为3
print(-7 // 2) #结果为-3.5,舍弃小数并向下取整,结果为-4

 

2.2 关系运算符

这个就是和 C/C++一样了,如下代码:

a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

 

在 Python 中还可以对两个字符串进行大小比较,比较规则是“字典序” 

2.3 逻辑运算符

这个也基本和 C/C++ 一样,就是“逻辑或”,“逻辑与”,“逻辑取反”,如下代码:

a = True
b = False
print(a and b) #逻辑与,有一个假,结果为假
print(a or b) #逻辑或,有一个真,结果为真
print(not a) #逻辑取反
print(not b) 

 

和其他编程语言类似,Python 也存在短路求值的规则:

  • 对于 and,如果左侧表达式为 False,则整体一定为 False,右侧表达式不再执行
  • 对于 or,如果左侧表达式为 True,则整体一定为 True,右侧表达式不再执行

2.4 赋值运算符

这个也是 C/C++ 一样的,如下代码:

a = b = 10 #链式赋值
a, b = 10, 20 #多元赋值a = 10
b = 20
a, b = b, a #也是多元赋值a += 10 #等价于 a = a + 1,其它复合赋值运算符也是同理
a -= 10 
a *= 10 
a /= 10     
a %= 10

注意:

  • 像 C++ / Java 中,存在 ++ -- 这样的 自增/自减 运算符;但Python 中则不支持这种运算,如果需要使用,直接使用 += 1 或者 -= 1
  • 除了上述之外,Python 中还有一些运算符,比如 身份运算符 (is,is not),成员运算符 (in,not in),位运算符 ( & | ~ ^ >) 等。 

2.5 练习

(1) [多选] 以下关于变量之间加法运算的说法, 正确的是:

A. Python 中的字符串之间够能相加.

B. Python 中的字符串可以和整数相加.

C. Python 中的整数可以和浮点数相加.

D. Python 中的整数可以和布尔值相加.

 

解答:答案是A C D。如果把布尔类型和整数进行运算,就会把 True 当作1,把 False 当作0

(2) [单选] 以下关于类型的说法, 正确的是:

A. Python 中既有字符串类型, 也有字符类型.

B. Python 中既有 float, 也有 double.

C. Python 中既有 int, 也有 long

D. Python 中的整数表示范围无上限.

 

解答:答案是 D。Python 只有字符串类型没有字符类型;只有 float 没有 double;只有 int 没有 long

(3) [单选] 以下 Python 代码, 合法的是

A. int a = 10

B. a = 10;

C. a = true

D. a = 'aaa' + 10 

 

解答:答案为 B。Python创建变量时不需要指定类型,如果要指定类型,要这样“a:int = 10”; 在 Python 中,分号是可有可无的; true 需要首字母大写;Python 中字符串和整数不能运算

三,语句

3.1 条件语句

  • if 后面的条件表达式, 没有 ( ), 使用 : 作为结尾.
  • if / else 命中条件后要执行的 "语句块", 使用 缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }
  • 对于多条件分支, 不是写作 else if, 而是 elif (合体了).
a = int(input("输入一个数:"))
if a > 0:print('输入的数是正数')
elif a < 0:print('输入的数是负数')
else:pass #pass表示空语句

  

3.2 while循环

计算 1 - 100 所有数的和:

sum = 0
num = 1
while num <= 100:sum += numnum += 1
print(sum)

 

计算5的阶乘:

 

result = 1
n = 1
while n <= 5:result *= nn += 1
print(result)

 

其余规则和 C/C++ 一直,while里面也可以嵌套 while 

3.3 for循环

对于for循环,Python 的使用方法和 C/C++ 很不相同,基本语法格式为:

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

所谓的 "可迭代对象",指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量",下面我们通过多个示例来熟悉 Python 的 for 循环的使用:

打印 1-10

#使用 range 函数,生成一个可迭代对象,范围是[1, 11),也就是[1, 10]
for i in range(1, 11):print(i)

 

这个有点类似 C++11 中的范围for

打印 2,4,6,8,10 

#range 的第三个参数可以指定迭代时候的 "步长". 也就是一次让循环变量加几.
for i in range(2, 12, 2):print(i)

 

从10开始打印到1 

# 步长也可以设置为负数
for i in range(10, 0, -1):print(i)

 

计算1-100 所有数字的和 

sum = 0
for i in range(1, 101):sum += i
print(sum)

 

循环语句的 continue 和break用法和C/C++是一模一样的,这里不再赘述 

四,实践

下面我们来搞一个“人生重开模拟器”

4.1 设置初始属性

在游戏中我们设定四个属性:颜值 (face) 体质 (strong) 智力 (iq) 家境 (home)

我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20;如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入:

print("+---------------------------------------------------------------------+")
print("|                                                                     |")
print("|                   花有重开日, 人无再少年                               |")
print("|                                                                     |")
print("|                   欢迎来到, 人生重开模拟器                             |")
print("|                                                                     |")
print("+---------------------------------------------------------------------+")
# 设置初始属性
while True:print("请设定初始属性(可用总点数 20)")face = int(input("设定 颜值(1-10):"))strong = int(input("设定 体质(1-10):"))iq = int(input("设定 智力(1-10):"))home = int(input("设定 家境(1-10):"))if face < 1 or face > 10:print("颜值设置有误!")continueif strong < 1 or strong > 10:print("体质设置有误!")continueif iq < 1 or iq > 10:print("智力设置有误!")continueif home < 1 or home > 10:print("家境设置有误!")continueif face + strong + iq + home > 20:print("总点数超过了 20!")continueprint("初始属性设定完成!")break

4.2 设置性别

  • 通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数, 类似于掷色子.
  • 如果是单数, 则性别设为男孩
  • 如果是双数, 则性别设为女孩.
  • 男孩和女孩会遇到不同的事件.
#设置性别
point = random.randint(1, 6) # 掷色子
if point % 2 == 1:gender = 'boy'print("你是个男孩")
else:gender = 'girl'print("你是个女孩")

 4.3 设置出生点

首先按照家境(home), 分成四个档位.:

  • 10 是第一档. 加成最高
  • [7, 9] 是第二档. 也有一些加成
  • [4, 6] 是第三档. 加成较少
  • [1, 3] 是第四档. 会扣掉属性.

再扔一次色子, 生成 [1, 3] 的随机数, 用来表示每一种细分情况

#设置出生点
point = random.randint(1, 3) # 掷色子
if home == 10:print('你出生在帝都, 你的父母是高官政要')home += 1iq += 1face += 1
elif 7 <= home <= 9:if point == 1:print('你出生在大城市, 你的父母是公务员')face += 2elif point == 2:print('你出生在大城市, 你的父母是大企业高管')home += 2else:print('你出生在大城市, 你的父母是大学教授')iq += 2
elif 4 <= home <= 6:if point == 1:print('你出生在三线城市, 你的父母是教师')iq += 1elif point == 2:print('你出生在镇上, 你的父母是医生')strong += 1else:print("你出生在镇上, 你的父母是个体户")home += 1
else:if 1 <= point <= 2:print('你出生在村里, 你的父母是辛苦劳作的农民')strong += 1face -= 2elif 3 <= point <= 4:print('你出生在穷乡僻壤, 你的父母是无业游民')home -= 1else:print('你出生在镇上, 你父母感情不和')strong -= 1

4.4 生成人生经历 

按照年龄, 把人生经历分成四个阶段:

  • 幼年阶段 [1, 10]
  • 青年阶段 [11, 20]
  • 壮年阶段 [20, 50]
  • 老年阶段 50 岁以上.

每个阶段都会有不同的精力和事件发生:

  • 幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
  • 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化
  • 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性
  • 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高

此处我们以幼年为例, 简单实现一下这里的处理逻辑:

  • 使用 for 循环, 按照年龄循环起来.
  • 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件.
  • 根据性别, 年龄, 各种属性, 来触发不同的事件,这里都使用 if - else 的方式来组织.
  • 不同的事件可能会对属性有正面/负面的影响. 在每一年的最后, 打印这一年遇到的事情.
  • 如果夭折, 则直接 sys.exit(0) 退出程序.
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.
#生成人生经历,这里以幼年为例
for age in range(1, 11):info = f'你今年 {age} 岁, 'point = random.randint(1, 3)# 性别触发事件if gender == 'girl' and home <= 3 and point == 1:info += '你家里人重男轻女思想非常严重, 你被遗弃了!'print(info)print("游戏结束!")sys.exit(0)# 体质触发的事件elif strong < 6 and point != 3:info += '你生了一场病, 'if home >= 5:info += '在父母的精心照料下恢复了健康'strong += 1home -= 1else:info += '你的父母没精力管你, 你的身体状况更糟糕了'strong -= 1# 颜值触发的事件elif face < 4 and age >= 7:info += '你因为长的太丑, 别的小朋友不喜欢你, 'if iq > 5:info += '你决定用学习填充自己'iq += 1else:if gender == 'boy':info += '你和别的小朋友经常打架'iq -= 1strong += 1else:info += '你经常被别的小朋友欺负'strong -= 1# 智商触发的事件elif iq < 5:info += '你看起来傻傻的, 'if home >= 8 and age >= 6:info += '你的父母给你送到更好的学校学习'elif 4 <= home <= 7:if gender == 'boy':info += '你的父母鼓励你多运动, 加强身体素质'strong += 1else:info += '你的父母鼓励你多打扮自己'face += 1else:info += '你的父母为此经常吵架'if point == 1:strong -= 1elif point == 2:iq -= 1# 健康成长else:info += '你健康成长, 'if point == 1:info += '看起来更聪明了'iq += 1elif point == 2:info += '看起来更好看了'face += 1else:info += '看起来更结实了'strong += 1print('-------------------------------------------')print(info)print(f'strong={strong}, face={face}, iq={iq}, home={home}')time.sleep(1)

 4.5 完整代码

import random
import sys
import time
print("+---------------------------------------------------------------------+")
print("|                                                                     |")
print("|                   花有重开日, 人无再少年                               |")
print("|                                                                     |")
print("|                   欢迎来到, 人生重开模拟器                             |")
print("|                                                                     |")
print("+---------------------------------------------------------------------+")
# 设置初始属性
while True:print("请设定初始属性(可用总点数 20)")face = int(input("设定 颜值(1-10):"))strong = int(input("设定 体质(1-10):"))iq = int(input("设定 智力(1-10):"))home = int(input("设定 家境(1-10):"))if face < 1 or face > 10:print("颜值设置有误!")continueif strong < 1 or strong > 10:print("体质设置有误!")continueif iq < 1 or iq > 10:print("智力设置有误!")continueif home < 1 or home > 10:print("家境设置有误!")continueif face + strong + iq + home > 20:print("总点数超过了 20!")continueprint("初始属性设定完成!")break
#设置性别
point = random.randint(1, 6) # 掷色子
if point % 2 == 1:gender = 'boy'print("你是个男孩")
else:gender = 'girl'print("你是个女孩")
#设置出生点
point = random.randint(1, 3) # 掷色子
if home == 10:print('你出生在帝都, 你的父母是高官政要')home += 1iq += 1face += 1
elif 7 <= home <= 9:if point == 1:print('你出生在大城市, 你的父母是公务员')face += 2elif point == 2:print('你出生在大城市, 你的父母是大企业高管')home += 2else:print('你出生在大城市, 你的父母是大学教授')iq += 2
elif 4 <= home <= 6:if point == 1:print('你出生在三线城市, 你的父母是教师')iq += 1elif point == 2:print('你出生在镇上, 你的父母是医生')strong += 1else:print("你出生在镇上, 你的父母是个体户")home += 1
else:if 1 <= point <= 2:print('你出生在村里, 你的父母是辛苦劳作的农民')strong += 1face -= 2elif 3 <= point <= 4:print('你出生在穷乡僻壤, 你的父母是无业游民')home -= 1else:print('你出生在镇上, 你父母感情不和')strong -= 1#生成人生经历,这里以幼年为例
for age in range(1, 11):info = f'你今年 {age} 岁, 'point = random.randint(1, 3)# 性别触发事件if gender == 'girl' and home <= 3 and point == 1:info += '你家里人重男轻女思想非常严重, 你被遗弃了!'print(info)print("游戏结束!")sys.exit(0)# 体质触发的事件elif strong < 6 and point != 3:info += '你生了一场病, 'if home >= 5:info += '在父母的精心照料下恢复了健康'strong += 1home -= 1else:info += '你的父母没精力管你, 你的身体状况更糟糕了'strong -= 1# 颜值触发的事件elif face < 4 and age >= 7:info += '你因为长的太丑, 别的小朋友不喜欢你, 'if iq > 5:info += '你决定用学习填充自己'iq += 1else:if gender == 'boy':info += '你和别的小朋友经常打架'iq -= 1strong += 1else:info += '你经常被别的小朋友欺负'strong -= 1# 智商触发的事件elif iq < 5:info += '你看起来傻傻的, 'if home >= 8 and age >= 6:info += '你的父母给你送到更好的学校学习'elif 4 <= home <= 7:if gender == 'boy':info += '你的父母鼓励你多运动, 加强身体素质'strong += 1else:info += '你的父母鼓励你多打扮自己'face += 1else:info += '你的父母为此经常吵架'if point == 1:strong -= 1elif point == 2:iq -= 1# 健康成长else:info += '你健康成长, 'if point == 1:info += '看起来更聪明了'iq += 1elif point == 2:info += '看起来更好看了'face += 1else:info += '看起来更结实了'strong += 1print('-------------------------------------------')print(info)print(f'strong={strong}, face={face}, iq={iq}, home={home}')time.sleep(1)

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

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

相关文章

如何用状态图进行设计06

独立的控制线程 扩展状态图也提供了获取无序的输入事件的方法。这意味着一个状态开始时&#xff0c;它可能位于一个或多个控制线程的交叉点。控制行为的每个独立线程都类似一个状态机&#xff0c;独自运行&#xff0c;互不干扰。因此&#xff0c;这些控制线程可能会同时发生状…

嵌入式学习(18)-stm32F407串口接收空闲中断+DMA

一、概述 在一些一次性接收大批量数据的引用场合&#xff0c;如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断DMA实现。 二、应用 在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常&#xff0c;主要原因还…

多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数

&#xff08;40&#xff09;用 thread 类 或全局 async (…) 函数&#xff0c;创建新线程时&#xff0c;谁才是在新线程里第一个被执行的函数&#xff1f; 弄清楚这个问题&#xff0c;有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async &#xff08;…&#xff0…

UOB大华银行|校招网申综合能力SHL测评题库英语版本真题分析

大华银行有限公司&#xff08;大华银行&#xff09;是亚洲银行业的翘楚&#xff0c;大华银行总部位于新加坡&#xff0c;并在中国、印度尼西亚、马来西亚、泰国及越南设立了全资法人银行&#xff0c;在全球拥有约500 间分行及办事处&#xff0c;分布在亚太、欧洲与北美的19 个国…

WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程

前言 Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯Java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装&#xff0c;数据抽取高效稳定 WebSpoon是Kettle的Web版本&#xff0c;由Kettle社区维护&#xff0c;不受Pentaho支持&#xff0c;…

用人话讲计算机:Python篇!(十二)正则运算+re模块

目录 一、正则表达式 &#xff08;1&#xff09;什么是正则表达式 &#xff08;2&#xff09;它的结构及使用 示例&#xff1a; 1.字符 . &#xff08;←这里有个小点哦&#xff09; 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d &#xff08;3&#xff09;补充&#xff…

Service Discovery in Microservices 客户端/服务端服务发现

原文链接 Client Side Service Discovery in Microservices - GeeksforGeeks 原文链接 Server Side Service Discovery in Microservices - GeeksforGeeks 目录 服务发现介绍 Server-Side 服务发现 实例&#xff1a; Client-Side 服务发现 实例&#xff1a; 服务发现介绍…

基于Python深度学习的【猫狗宠物识别】系统设计实现

一、简介 宠物识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;基于TensorFlow搭建卷积神经网络算法&#xff0c;并收集了37种常见的猫狗宠物种类数据集【‘阿比西尼亚猫&#xff08;Abyssinian&#xff09;’, ‘孟加拉猫&#xff08;Bengal&#xff09;’…

不能通过 ip 直接访问 共享盘 解决方法

from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…

10篇--图像噪点消除

概念 何为噪点&#xff1f; 噪点&#xff1a;指图像收到的一些干扰因素&#xff0c;通常是由图像采集设备、传输信道等因素造成的&#xff0c;表现为图像中随机的亮度&#xff0c;也可以理解为有那么一些点的像素值与周围的像素值格格不入。 常见的噪声类型 高斯噪声&#…

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…

数据结构——ST表

ST表的定义 ST表&#xff0c;又名稀疏表&#xff0c;是一种基于倍增思想&#xff0c;用于解决可重复贡献问题的数据结构 倍增思想 这里列举一个去寻找一个区间内的最大值的例子 因为每次会将将区间增大一倍&#xff0c;所以才被称之为倍增思想 &#xff0c;这种思想十分好用…

创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】

&#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 简单汇总一下创建…

【PlantUML系列】部署图(七)

一、部署图的组成部分 节点&#xff08;Node&#xff09;&#xff1a;使用node关键字定义一个节点&#xff0c;节点可以是服务器、数据库或其他硬件设备。组件&#xff08;Component&#xff09;&#xff1a;使用component关键字定义一个组件&#xff0c;组件可以是软件模块或服…

【JAVA】旅游行业中大数据的使用

一、应用场景 数据采集与整合&#xff1a;全面收集旅游数据&#xff0c;如客流量、游客满意度等&#xff0c;整合形成统一数据集&#xff0c;为后续分析提供便利。 舆情监测与分析&#xff1a;实时监测旅游目的地的舆情信息&#xff0c;运用NLP算法进行智能处理&#xff0c;及…

大屏开源项目go-view二次开发3----象形柱图控件(C#)

环境搭建参考&#xff1a; 大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客 要做的象形柱图控件最终效果如下图&#xff1a; 其实这个控件我前面的文章也介绍过&#xff0c;不过是用wpf做的&#xff0c;链接如下&#xff1a; wpf利用Microsoft.Web.WebView2显示html…

内网是如何访问到互联网(H3C源NAT)

H3C设备NAPT配置 直接打开29篇的拓扑&#xff0c;之前都配置好了 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1&#xff0c;下面的终端访问不了&#xff0c;需要做NAPT源…

Linux高性能服务器编程中的TCP带外数据梳理总结

Linux高性能服务器编程中的TCP带外数据梳理总结 文章目录 Linux高性能服务器编程中的TCP带外数据梳理总结1.TCP 带外数据总结2.第五章带外数据send.crecv.c 3.第九章带外数据send.cselect.c 4.第十章带外数据send.csig_msg.c 1.TCP 带外数据总结 至此&#xff0c;我们讨论完了…

PyTorch3D 可视化

PyTorch3D是非常好用的3D工具库。但是PyTorch3D对于可用于debug&#xff08;例如调整cameras参数&#xff09;的可视化工具并没有进行系统的介绍。这篇文章主要是想介绍我觉得非常使用的PyTorch3D可视化工具。 1. 新建一个Mesh 从hugging face上下载一个glb文件&#xff0c;例…

C# 网络编程--关于UDP 通信(二)

UDP (User Datagram Protocol) 是一种无连接的传输层协议&#xff0c;主要用于支持数据报文的传输。它的主要特点包括简单、高效、不保证可靠性和顺序。 1.UDP协议基本概念 1.udp基于IP的简单的协议&#xff0c;不可靠的协议 2.优点&#xff1a;简单、 轻量化、 传输速度高、…