当前位置: 首页 > news >正文

Day 03 python学习笔记

位运算

基于二进制的运算(计算机的底层基于位运算)

计算机最小单位:bit (比特/位/二进制)

1byte(字节) = 8bit     ( 0000  0000)

&:与   (全真为真,一假则假)

|:或    (全假为假,一真则真)

^:异或  (相反为真,相同为假)

~:按位取反(包含符号位)(取反后得到的是补码)

>>:右移(相当于除以2的n次方----n:右移的位数)

<<:左移(相当于乘以2的n次方----n:左移的位数)

我们先来了解其底层的原理

1、正数相加

eg: 10+11

        0000 1010     (10)

        0000 1011     (11)

----------------------------------   (逢二进一)

        0001 0101     (21)

2、正数与负数相加的问题

负数:8位的首位作为符号位 (1代表负数 ,0代表正数)

其中8位最大存储:+127(0111 1111)

             最小存储:-128 (1000 0000)

因为0没有-0,所以创作者将(1000 0000)定义为-128

eg: -3 +2

        1000 0011        

        0000 0010

---------------------------

        1000 0101     (-5)  错误

为了解决负数运算问题----原码、反码、补码三个概念

原码: 数值的标准的二进制位

反码:符号位不变,其余位取反

补码:反码+1

                 原码                  反码                  补码

-3     1000 0011            1111 1100            1111 1101

2    (正数原码、反码与补码相同)        0000 0010

-------------------------------------------------------------------------

        1000 0001            1111 1110            1111 1111

用补码运算完换算为原码即为结果(-1  :  1000 0001)

计算机底层的运算是基于补码运算  

那我们再看一个例子:-3+4

                 原码                  反码                  补码

-3     1000 0011            1111 1100            1111 1101

4                                                               0000 0100

-------------------------------------------------------------------------

                                                               10000 0001 

(溢出的直接丢弃,然后因为结构是正数,正数原码与补码相同,即是结果为1)

然后我们再来学习位运算:

&:与   (全真为真,一假则假)

eg:        8&9

        0000 1000

        0000 1001   &

---------------------------

        0000 1000  (8)

>>> 8&9
8
>>>

|:或    (全假为假,一真则真)

eg:        8|9

        0000 1000

        0000 1001   |

---------------------------

        0000 1001  (9)

>>> 8|9
9
>>>

^:异或  (相反为真,相同为假)

eg:        8^9

        0000 1000

        0000 1001   ^

---------------------------

        0000 0001  (1)

>>> 8^9
1
>>>

补充:一个数异或0,结果为它本身

~:按位取反(包含符号位)(取反后得到的是补码)

eg:        ~2

        0000 0010

----> 1111 1101(补码) 需 -1 变为反码

----> 1111 1100  (反码) 符号位不变,其余位按位取反变为原码

----> 1000 0011 (原码)  -3

>>> ~2
-3
>>>

>>:右移(相当于除以2的n次方----n:右移的位数)

eg:        8>>2

        0000 1000

        0000 001000     (右边溢出丢弃,左边补0)

结果为 2

>>> 8>>2
2
>>>

<<:左移(相当于乘以2的n次方----n:左移的位数)

eg:        8<<2

        0000 1000

    000010 0000   (左边溢出丢弃,右边补0)

结果为 32

>>> 8<<2
32
>>>

三元运算符

格式:

条件成立时的代码  if  判断  else  条件不成立时的代码

eg:
a = int(input("请输入数字:"))
print("你成年了!") if a > 18 else print("小屁孩!")请输入数字:20
你成年了!请输入数字:16
小屁孩!

程序结构

分为3种:

顺序结构

选择结构

循环结构

我们今天先来了解选择结构

选择结构

要学习选择结构我们需先温习一下判断语句

布尔类型和比较运算符

真        和        假
True     真     1
False   假      0
变量名=”布尔类型“
通过比较运算符进行内容比较得到

变量定义存储布尔类型的数据

bool_1=True
bool_2=False
print(bool_1,type(bool_1))True <class 'bool'>

比较运算符的使用

print(2==3)
print(2!=3)False
True

if语句

条件语句:去网吧要身份证,可能会发生什么?判断是否成年~
所谓判断就是条件语句,即条件成立执行某些代码,不成立,则不执行代码

单语句

语法:

if 要判断的条件(表达式):条件成立时,要执行的代码1条件成立时,要执行的代码2……
print('你可管不住我哦')  #因为未缩进,所以不是条件成立时,才能执行,#就是简单的print语句

注意:if下方未加缩进的代码不是if里的代码,始终会执行

双语句

语法:

if 条件:条件成立执行的代码
else:条件不成立时的代码

注意:后面的是 : 不是 (且是英文的)

四个空格缩进不要忘记
if语句执行流程:(debug查看)
某些条件执行了相关代码,则其他情况的代码解释器根本就不会执行

多条件判断语法

eg:
age = int(input("请输入您的年龄:"))#if (age >= 18) and (age <= 40)
if 40 >= age >= 18:print("恭喜你,你成年了")
elif age > 40:print("哇偶,水木年华")
else:print("你是未成年")

判断语句终极--嵌套使用

坐公交:有钱,上车,没钱,不上,上车,有空位置,坐下,没有,站着

#案例:
money = 1
seat = 1
if money ===1 :print('上车')if seat ===1 :print('有空位置,快坐下')、else:print('没位置了,站一会儿吧')
else:print('没钱,跟着跑')

如果没有理解的话,可以在看一下我前两篇博客(python随手小练2和3)可以加深理解

索引   

索引  [ ]

分为:正向索引:(从左向右)下标从0开始        eg:0 1 2 3

           负数索引:(从右向左)下标从-1开始        eg:-3 -2 -1  

eg:
s = 'l love you'
print(s[0])
print(s[1])
print(s[9])
print(s[-1])
print(s[-1]
结果:
l#因为坐标1,即第二个字符是空格
u
u
yprint(s[10])
结果:
Traceback (most recent call last):File "D:\pycharm\main.py", line 5, in <module>print(s[10])
IndexError: string index out of range print(s[-9])
结果:
Traceback (most recent call last):File "D:\pycharm\main.py", line 6, in <module>print(s[-11])
IndexError: string index out of range   
#因为没有坐标10和-11,所以报错

字符串的切片

字符串的切片:从字符串中截取一个特定的序列(访问序列中元素的一个办法)

格式:sname[start:end:step]

sname:要操作的序列名称

start:表示的开始位置(包含自身的),如果不去指定的话,默认从0开始

end:表示切片的结束位置(不包含自身),如果不指定的话,默认是序列的长度(下标索引是字符串长度-1)即全部

step:表示切片的步长,如果省略的话,默认为1

举例解释:

eg:
s = 'QinghuadaxueBeijingdaxue'
print(s[0:5])   #省略step
print(s[2:])    #省略end和step
print(s[:5])    #省略start和step
print(s[:])     #省略start、end和step
print(s[0])     #错误省略,变成索引结果:
Qingh   #截取坐标0-4共5个字符(因为start包含自身,end不包含自身),即左闭右开
nghuadaxueBeijingdaxue   #从坐标2-序列的长度(即下标索引是字符串长度-1)
Qingh
Q

当省略step时,第二个 :可以省略

若省略step和end时,第二个 :可以省略,但第一个 :不能省略(不然就变成索引了)

s = 'QinghuadaxueBeijingdaxue'
print(s[-3:-1])
print(s[-1:-3])
print(s[0:7:2])
print(s[::-1])
print(s[-1:-3:-1])结果:
xu       #因为step默认为1,所以是从左到右#操作错误,空字符串
Qnha     #因为step为2,所以是两个字符为一步
euxadgnijieBeuxadauhgniQ  #因为step为-1,默认按负索引,相当于反转
eu       #现在因为step为-1,所以可以正常切取

可以参考我的后面一篇博客(python随手小练4)加深理解

python数据容器

定义:可以容纳多份数据的数据类型,容纳的每一份数据成为一个元素,可以是任意类型的数据

数据容器:根据是否支持重复元素、是否可以修改、是否有序等

分为:列表,元组,字符串,集合,字典

列表

定义及语法:
字面量:[元素1,元素2,元素3……]
变量名称=[元素1,元素2,元素3……]

列表内的每一个数据,称之为元素
可以为不同数据类型,支持嵌套

eg:
list = [1,2,3,"l love you",[7,8,9]] 
#列表里包含数字,字符串,列表
print(list[1])
print(list[-1])
print(list[-1][0])  #取列表里列表的元素结果:
2
[7,8,9]
7

列表的下标索引取出特定位置的元素

列表的索引下标从0开始  ,‘,’分割(且正负索引皆可用)

len() 查看一下列表的长度

列表里的数也是可以改变的(可以重新赋值)

eg:
list = [1,2,3,"l love you",[7,8,9]]
print(len(list))
list[1] = "l love you"
print(list)结果:
5
[1, 'l love you', 3, 'l love you', [7, 8, 9]]

列表的加法和乘法

eg:
list_1 = [1,2,3]
list_2 = [4,5,6]
list_3 = list_1 + list_2
print(list_3)
list_4 = list_3 * 3  #就是元素打印三遍
print(list_4)结果:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

定义空列表:
变量名称 = [ ]
变量名称 = list()

eg:
>>> list1 = []
>>> list2 = list()
>>> type(list1)
<class 'list'>
>>> type(list2)
<class 'list'>

eg:
list2 = list([1,2,3])  #在初始化时赋值
print(list2)结果:
[1, 2, 3]

列表的常用操作

(列表的方法(函数定义为class的成员,函数则小称为方法)):


 

我们可以用dir()来查看列表的方法

其中我们只看后面的,前后有下划线的是翻译器自带的

接下来我们来详细解释一下用法:

append

列表.append(元素)        追加一批元素

eg:
>>> list = [1,2,3]
>>> list.append(21)
>>> list
[1, 2, 3, 21]
>>>

insert

列表.insert(下标,元素)        插入元素

eg:
>>> list
[1, 2, 3, 21]
>>> list2 = [4,5,6]
>>> list.insert(1,list2)
>>> list
[1, [4, 5, 6], 2, 3, 21]   #下标1代表插入元素所在的位置
>>>

sort

列表.sort()           列表排序(只能排Int)字母按照ASCII值进行排序,类型不能混淆

默认为升序  (列表.sort(reverse=False) )

列表.sort(reverse=True)        这样即为降序

eg:
>>> list3 = [12,1,23,75,22]
>>> list3
[12, 1, 23, 75, 22]
>>> list3.sort()
>>> list3
[1, 12, 22, 23, 75]
>>> list3.sort(reverse=True)
>>> list3
[75, 23, 22, 12, 1]
>>>

index

列表.index(元素)        查询某元素下标

eg:
>>> list3
[75, 23, 22, 12, 1]
>>> list3.index(22)
2        #索引下标为2时为22
>>> list3.index(222)      #没有时报错
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: 222 is not in list
>>>

reverse

列表.reverse()        将列表元素顺序翻转

eg:
>>> list3
[75, 23, 22, 12, 1]
>>> list3.reverse()
>>> list3
[1, 12, 22, 23, 75]
>>>

remove

列表.remove(元素)        通过元素来移除元素,如果元素不存在则抛出异常

eg:
>>> list3
[1, 12, 22, 23, 75]
>>> list3.remove(12)
>>> list3
[1, 22, 23, 75]
>>> list3.remove(12)    #如果要移除的元素不存在则报错
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>

count

列表.count(元素)        统计某元素在列表中的数量

eg:
>>> ls = [1,2,3,1,1,2,2,2,3]
>>> ls
[1, 2, 3, 1, 1, 2, 2, 2, 3]
>>> ls.count(1)
3
>>>

clear

列表.clear()        清空列表

eg:
>>> ls
[1, 2, 3, 1, 1, 2, 2, 2, 3]
>>> ls.clear()
>>> ls
[]
>>>

copy

新列表 = 列表.copy() 

浅拷贝对象(拷贝)不等价与 =(引用传递),在堆内存中进行对象拷贝

eg:
>>> ls = [1,2,3]
>>> ls1 = ls.copy()
>>> ls1
[1, 2, 3]
>>>

exend

列表 .extend(列表)         合并列表

eg:
>>> ls1
[1, 2, 3]
>>> ls2 = [3,4,5]
>>> ls1.extend(ls2)
>>> ls1
[1, 2, 3, 3, 4, 5]
>>> ls2
[3, 4, 5]
>>>

pop

列表.pop(下标)        删掉的元素作为返回值得到
下标省略默认删除最后一个元素

eg:
>>> ls2
[3, 4, 5]
>>> ls2.pop()
5
>>> ls2
[3, 4]
>>> ls2.pop(1)
4
>>> ls2
[3]
>>>

列表特点:

相关文章:

Day 03 python学习笔记

位运算 基于二进制的运算&#xff08;计算机的底层基于位运算&#xff09; 计算机最小单位&#xff1a;bit (比特/位/二进制) 1byte&#xff08;字节&#xff09; 8bit &#xff08; 0000 0000&#xff09; &&#xff1a;与 &#xff08;全真为真&#xff0c;一假则…...

优化类问题概述

数学建模系列文章&#xff1a; 以下是个人在准备数模国赛时候的一些模型算法和代码整理&#xff0c;有空会不断更新内容&#xff1a; 评价模型&#xff08;一&#xff09;层次分析法&#xff08;AHP&#xff09;,熵权法&#xff0c;TOPSIS分析 及其对应 PYTHON 实现代码和例题…...

第一个 Go 程序“hello,world“ 与 main 函数

第一个 Go 程序"hello&#xff0c;world" 与 main 函数 文章目录 第一个 Go 程序"hello&#xff0c;world" 与 main 函数一.创建“hello&#xff0c;world”示例程序二. “hello&#xff0c;world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…...

MySQL缓冲池Buffer Pool

前言 ​ 在应用系统中&#xff0c;为加速数据访问&#xff0c;会把高频的数据放在「缓存」(Redis、MongoDB)里&#xff0c;减轻数据库的压力。在操作系统中&#xff0c;为了减少磁盘IO&#xff0c;同时为了快速响应&#xff0c;引入了「缓冲池」(buffer pool)机制。 ​ MySQL…...

springboot实现发送邮箱验证码

准备工作 在邮箱官网开放SMTP授权&#xff0c;获取相应密钥&#xff0c;才可以进行发送邮件 这里以网易163邮箱为例&#xff0c;登录邮箱后&#xff0c;依次点击“设置-POP3/SMTP/IMAP” &#xff0c;然后开启SMTP服务。这时候会提示一个授权码&#xff0c;例如&#xff1a;H…...

ESP8266使用记录(三)

通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…...

基于微信小程序的在线视频课程学习平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉…...

CloudCompare 二次开发(15)——点云添加高斯噪声

目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加高斯噪声。添加高斯噪声的算法原理见:PCL 点云添加高斯噪声并保存。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddGassNoise(); //…...

一波免费、好用的API接口分享

全国快递物流地图轨迹查询&#xff1a;【H5物流轨迹、单号识别】通过物流单号和收寄件地址&#xff0c;自动评估物流时效&#xff0c;并在地图中展示包裹运输轨迹。包括顺丰、圆通、申通等主流快递公司。自动识别快递公司及单号&#xff0c;实时查询&#xff0c;稳定高效&#…...

Android App ~ LiveData

LiveData 两种更新数据方式 setValue(T value)postValue(T value) setValue()只能在主线程中调用&#xff0c;postValue()可以在任何线程中调用。 MutableLiveData 1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据. 2.其次LiveData其实也是一个观察者…...

全球第4大操作系统(鸿蒙)的软件后缀.hap

system exe 2022-12-01 04:38:38 首页 > 操作系统 145|0条评论 鸿蒙OS兼容已有安卓程序&#xff1a;这事不稀奇。 其实一个系统兼容另外系统的可执行程序并非新鲜事&#xff0c;比如linux下的wine和crossover可以兼容许多win系统的.exe程序。 作为回应&#xff0c;Wind…...

算法练习第六十四天

LCR 184. 设计自助结算系统 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a;利用一个双端维护队列一个往后递减的队列&#xff0c;对头是最大值&#xff0c;每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出&#xff0c;这样能保证留在队列中的数都是会…...

安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤【二】

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 低版本可以参考上个博文了解相关安装方法。 LSP框架优点 简单来说装lsp框架的优点在于可以安装各种模块。包括 但不限于系统优化 加速 游戏开挂等等的模块。大致相当于电脑的扩展油猴 Lspos…...

实现一个宽高自适应的正方形

.square {width: 10%;height: 10vw;background: tomato; }.square {width: 20%;height: 0;padding-top: 20%;background: orange; }.square {width: 30%;overflow: hidden;background: yellow; } .square::after {content: ;display: block;margin-top: 100%; }...

shell脚本命令

Shell命令是在类Unix操作系统中使用的命令行解释器&#xff08;shell&#xff09;中执行的命令。Shell命令可以用于执行系统命令、操作文件、进行文本处理、管理进程等。以下是一些常见的Shell命令&#xff1a; 1. ls&#xff1a;列出当前目录下的文件和文件夹。 2. cd&#x…...

Vue2023 面试归纳及复习(2)

1 vue3中的动态组件和KeepAlive组件 动态组件component <component>动态组件是一种可以根据数据变化而动态加载不同组件的方式。使用动态组件可以有效地减少代码复杂度&#xff0c;提高组件的复用性和灵活性。 动态组件通过一个特殊的属性is来实现动态加载&#xff0c…...

idea 本地项目上传到 Git 步骤

第一步&#xff1a;菜单栏 VCS——>import into Version control——>Create git Repository——>弹出框找到选中自己项目——>点击Ok 第二步&#xff1a;选中项目右键 ——>git——>Add 文件会变成绿色表示成功 第三步:VCS——>commit——>ok 提交到…...

【从0学习Solidity】41. WETH

【从0学习Solidity】41. WETH 博主简介&#xff1a;不写代码没饭吃&#xff0c;一名全栈领域的创作者&#xff0c;专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构&#xff0c;分享一些项目实战经验以及前沿技术的见解。关注我们的主页&#xff0c;探索全栈开发…...

微信小程序的无限瀑布流写法

微信小程序的无限瀑布流实现总算做完了&#xff0c;换了好几种方法&#xff0c;过程中出现了各种BUG。 首先官方有瀑布流的插件&#xff08;Skyline /grid-view&#xff09;&#xff0c;不是原生的我就不想引入&#xff0c;因为我的方块流页面已经搭好了&#xff0c;引入说不定…...

前有CAP理论,后有BASE理论,分布式系统理论基石

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...