python 重定向 ctf_python,ctf笔记随笔

一、在centos虚拟机中安装pyhton3环境:

安装pip3:yum install python36-pip

将pip升级到最新版本:pip3 install --upgrade pip

运行pip:pip

安装requests模块:pip install requests

列出系统中已经安装的所有的python模块:pip list

二、IDLE与python脚本

1、 使用Python,既可以编辑成脚本文件,也可以直接在Python自带的开发环境IDLE里交互式的执行各种命令。

通常情况下,建议先在IDLE里对程序的各部分功能进行测试,验证无误后再编写成脚本批量执行。

2、进入退出IDLE

执行python3命令进入IDLE交互模式

执行exit( ) 命令退出IDLE

3、Python程序文件一般以.py作为后缀, 如 test.py。

可以通过python3 test.py的方式执行。

也可以先执行"chmod a+x test.py"命令,为脚本文件添加执行权限,然后再以"./test.py" 的方式执行。

4、脚本文件命名不能太随意,尤其是注意不要与Python库重名,例如不能用os.py的名字。

5、python脚本的程序文件中的第一 行般都采用固定的格式:#!/usr/bin/python3

6、Python解释器

.负责将Python源代码解释成机器码并执行的程序。

如果不指定解释器, 就只能通过python3 test.py的方式来执行脚本程序。

7、Python2的脚本文件中还需要再加上一行"#coding:utf- 8"来指定编码格式。

Python2默认的编码格式是ASCII,如果不指定编码格式就无法处理中文信息。

Python3的默认编码是Unicode,无需指定编码格式也可以正常处理中文。

8、Python区分大小写,比如布尔值True和False,如果写成true或false就会报错。

5b31ed0c06c0b7f749bf4b004c1e3c45.png

9、Python中的注释主要分为两种:

单行注释 #,其后的内容将不会被执行。单行注释一般可放在一行程序代码之后, 或者独自成行。

多行注释,使用两组,每组三个连续的双引号”””或者三个连续的单引号‘‘   '      ,两组引号之间为多行注释的内容。

10、通常一个标准的完整Python脚本文件的头部,应有相关注释来记录编写者姓名、实现的功能和编写日期等重要信息。

三、变量和数据类型:

1、变量定义:

1.1、变量不需要声明,可以通过赋值创建变量,变量赋值通过"=”实现。

174375262ba153c7bad5e324ab0508dd.png

1.2、为变量赋值时应注意数据类型,字符型数据必须用引号引起来。

1dac476552c673185024c70554c18adc.png

2、变量赋值:

2.1、可以同时为多个变量赋值,但变量与数值的个数必须相等。

21e61deda230ba627693b7c2aec98492.png

2.2、也可以同时给多个变量赋相同的值

6f704ac777c90cc2da914a5696d82b60.png

2.3、不要使用系统保留关键字作为变量名,比如 pass 等。

2.4、如何查看pyhton系统的关键字:

先输入help()进入help的界面,在help界面中在输入keywords即可查看python系统关键字:

492c8bb4da27079facb2ab91631f69dc.png

3、数据类型:

3.1、区分数据类型的目的:

1、为不同类型的数据合理分配存储空间。

2、不同类型的数据可以做不同的数据处理。

3.2、Python中的数据类型主要有:

1、数值型,具有又分为整型和浮点型。

2、字符型,用单引号、双引号、三个单引号和三个双引号括起来的字符

3、布尔型,0、None、空字符串、空列表、空元组被看作False.

4、列表、元组、字典、集合

4、强类型:强类型,是指数据类型比较强势,不会轻易随着环境的变化而变化。

1、不同类型的数据之间不能进行运算。

2、用type( )函数可以检测数据类型。

3、利用int( ) 函数可以将文本型数据转换成数值型数据

4、利用str( )函数可以将数值型数据转换成文本型数据

5、在Python内部会把True当作1处理,把False当作0处理。

四、算术运算符

5caed7f4064d043f36895e20dbca6dfc.png

五、比较运算符

f8bd25718590977c338a8e1bc31f8412.png

进行等于比较时,应该使用==。

Python支持链状比较。   7

当对字符串进行比较运算时,是按ASCI码值的大小进行比较。

六、字符串运算符:

1、"+"表示连接

2、"*"表示将字符串重复n次

3、"+”和“*”除了用于字符串对象之外,还可以用于列表、元组、字典等对象。

七、逻辑运算符:

逻辑运算符and (与)、or(或)、not(非),主要用于判断表达式的值是否是True或False,通常与流程控制语句结合使用。

八、成员运算符:in和 not in,判断某个数据是否存在于另一个数据对象中, 运算结果为True或 False。

九、输入输出函数

1、Python中的大部分功能都是由各种函数来实现的。

1.1、输入数据主要用到input( )函数

1.2、输出数据主要用到print( )函数

2、input( )函数可以在屏幕上显示一段提示信息(提示信息可以为空)

3、等待用户输入一个数据之后,再将其赋值给一个变量。

4、input( )函数把输入的数据默认都看作是字符型,如果需要输入数值型数据,可以采用int()函数进行转换。

十、同时使用input函数定义2个变量

7e77daa357ba3befe0e25594976e1c24.png

十 一、同时使用input函数定义2个整数变量

9c14972a819db0aafdd1b601ec4893f9.png

十二、输出函数print

print()函数可以同时输出多组数据,每组数据之间用逗号","间隔,

print()函数遇到逗号”,"会输出一个空格。

58090a05f5af8ba734958c0edd34442c.png

如果希望在输出的内容之间没有空格,可以把它们作为字符串连接在一起,此时需要注意数据类型必须保持一致。

5f2efbd444053187480af79da5aa2282.png

十三、输出函数print

print()函数的语法格式: print(values,sep,end,file,flush)

values代表所要输出的值。

sep代表分隔符,如果要输出多个值的话,在值与值之间会添加指定的分隔符

end代表输出完毕之后,以指定的字符结束,默认是换行符"\n"。

十四、if的语法结构:

e3652afc56c5f01daeaea885cea0554c.png

每个条件后面要使用冒号":” ,表示满足条件后需要执行的语句块。

Python语法要求缩进统一 。语句块部分的代码要求必须缩进,而且缩进方式必须统一 。缩进方式用空格或tab都可以。

Python中没有switch....case分支语句。

十五、if 语句的表达条件

所有的Python合法表达式都可以作为条件表达式,只要表达式的值不是False、0、空值、None, Python解释器都认为与True等价。

十六、三元表达式

676cf8665dbf513e77478d94f71d28ac.png

095adabd415cfde4208645031a5e651f.png

十七、for循环和 while循环

循环次数确定 or 已知 用 for循环 ,循环次数未知,用 while 循环

十八、for循环的语法结构:

50b35af36ec4989c1103f796bf68730b.png

for循环执行时,依次将可迭代对象中的值赋值给变量,变量每赋值一次,就执行一次循环体。

注意,for语句后面必须要有冒号':’,循环体中的语句要注意缩进。

十九、九九乘法表:

for i in range(1,10):

for j in range(1,i+1):

print(str(j)+"*"+str(i)+"="+str(i*j),end=' ')

print()

3cce03968143df4c437c4c354fe5603a.png

二十、while循环:

1、for循环多用于循环次数可以提前确定的情况,尤其适用于枚举或遍历。

2、while循环一般用于循环次数难以确定的情况。

3、编程时一般优先考虑使用for循环。

二十 一、while循环的语法结构:

bd24f3a3426095f114ba07aa1dc71e64.png

二十二、break语句:

break,用于跳出当前所在的循环体,但并不退出程序。

注意,break只退出该层循环。对于循环嵌套,break只是退出那一层循环,上层循环不受影响,

64130f5815597b4cac8e78251bf64dca.png

二十三、continue语句

continue用于暂停本次操作,跳转至循环语句的顶部重新测试条件,本次执行过程中continue后的命令序列将被忽略。

注意,continue结束的不是整个循环,而是本次循环。

fcbd9d58c9fab1f7380495b655b4e911.png

二十四、对100以内的任意数循环求和,直到按q键退出。

while True:

a,b = map(int,input().split())

if a > 100 or b > 100 :

print("只能输入100以内的数")

continue

sum = a + b

print(sum)

q = input("按q键退出,按回车键继续")

if q == 'q':

break

二十五、编写一个验证用户账号和密码的脚本,要求实现以下功能:

运行脚本后,提示用户输入账号和密码。

如果账号密码正确,输出“登录成功" 。如果账号或密码错误,输出“账号密码错误,请重新登录"

最多允许3次输入错误,错误次数超过3次之后,输出“登录失败”,并退出脚本。

username = 'admin'

password = 'abc123'

i =0

while i < 3 :

i = i + 1

uname = input("账号:")

password1 = input("密码:")

if uname == username and password1 == password :

print("登录成功!")

break

elif i == 3 :

print("登录失败!")

else :

print("账号密码错误,请重新登录")

二十六:水仙花数,判断3位水仙花数:

for i in range(100,1000):

bai= i // 100

shi= i % 100 // 10

ge= i % 10

if i == bai ** 3 + shi ** 3 + ge ** 3:

print(i)

改进水仙花数:

for i in range(100,1000):

bai,shi,ge = map(int,str(i))

if i == bai**3 + shi**3 + ge**3 :

print(i)

二十七、已知: Sn=1+1/2+ 1/3+...+ 1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K (1≤k≤15) , 要求计算出一个最小的n;使得Sn > K

k = int(input())

n = 1

s = 0

while True:

s = s +1/n

if s > k :

print(n)

break

n = n+1

二十八、函数

1、python的命令分为内部和外部命令

2、python密码学主要使用的模块是pycipher,每一个加密的算法都是其中的一个函数

3、pyhton可以自己来定义一个函数,def函数

4、python还有专门的函数和普通的函数,专门的函数是对专门的对象进行处理的(split()只能对字符串对象来用),普通函数是input,print这种函数

二十九、类和对象1

1、面向过程和面向对象

面向过程编程, 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。如C语言。

面向对象编程,把构成问题的事物分解成各个对象,建立对象的目的是为了实现某个功能,而不是为了完成一个步骤。面向对象是以功能来划分问题,而不是步骤。

1、类是实例的工厂,类提供模板。

2、实例是具体的产品,对象是类的实例。

2、定义类:class 对象

3、对象,继承,封装,多态等

4、isinstance  检测它是不是属于一个类

三十、类和对象2

1、属性和方法,属性就是变量,方法就是函数(类里面的函数)

2、对象的属性可以更改,而类的power属性仍保持不变

3、通过内置函数dir()可以查看类或对象的属性和方法。

4、查看类的默认属性_ dict_ , 可以查看属性以及属性的值。

5、通过help()函数可以查看类或对象的帮助信息。

概念总结:

面向对象是一种编程方式,此编程方式的实现是基于类和对象的使用。

类是一种模板,模板中封装了多个函数供使用。

对象是根据模板创建的实例,可调用被封装在类中的函数。

模块中则集成了大量相关的类、函数、变量。

三十一、索引和切片

1、每个字符串都是一个对象, 来自str类。

2、每个字符串都可以调用str类中的方法。

3、索引:字符串中的每个字符都可以被看作一个独立的元素, 都有一个相应的索引编号,索引编号从0开始。 a[0/4/-1]

4、切片:

1、指定一个索引区间,取出指定的字符串,这就称为切片

2、切片的格式[起始索引:结束索引:步长]

3、起始索引默认为0

4、结束索引不包含该索引本身,省略时表示一直取到字符串的终点

5、步长默认为1

as:练习:

假设a = 'CaptureTheFlag',完成下列要求:

(1)取出字符串中的前7个字符。

(2)取出字符串中的后4个字符。

(3)取出字符串中的第8~第10个字符。

(4)取出字符串中从第8个字符开始直至最后的所有字符。

(5)将字符串反转。

a='CaptureTheFlag'

print(a[:7])

print(a[-4:])

print(a[8:11])

print(a[8:])

print(a[::-1])

三十二、进制转换

1、二进制:以b作为前缀,0b1010。

2、八进制:以o作为前缀,0o173。

3、十六进制:以0x作为前缀,0x1f。

4、用print函数直接输出这些带前缀的数据,可将它们转换为十进制数。

5、Python内置函数bin()、oct()、 hex()分别用来将十进制数字转换成二进制、八进制、十六进制。

6、int()函数可将其它进制的数据转换成十进制。

语法格式: int( '被转换的数据’,进制)

被转换的数据必须要以字符串的形式输入。

as:将下列16进制串中倒数第5, 6位转换为3位十进制数,

将最后4位转换为5位十进制卡号,中间用",”分开。(0000944664)

a='0000944664'

b = a[-6:-4]

print(int(b,16))

c = a[-4:]

print(int(c,16))

print(str(int(b,16))+','+str(int(c,16)))三十三、字符编码(ASCII码):

1、字符编码,将人类所使用的每个字符都对应到一个唯一的数字 上。

2、ASCII码,美国标准信息交换码。

3、对英文字母以及一些常用的符号进行编码,一共表示了128个字符。

4、每个字符在计算机内部都对应了一个8位的二进制数,大小为1个字节。

三十四、man sacii 可以显示ascii码表(在linux中执行man ascii命令可以查看ASCI表。)

三十五、ASCII表一共只有128个字符, 对应的十进制数范围是0~127。

三十六、ASCI码实际上只有7位二进制数。

三十七、ASCII码表中的128个字符分成了两部分:

第一部分,0~31,规定了-些特殊的用途,当终端设备或者打印机遇上这些字符时,就要做一些约定的动作,比如换行、响铃等,所以这些字符被称为非打印字符。

第二部分,32~127,可打印字符,也就是可以显示输出的字符,包括了所有的大小写英文字母、数字、标点符号等。

三十八、利用ord()函数可以返回某个字符所对应的ASCII码(用十进制表示)。

三十九、利用chr()函数可以返回某个十进制数所对应的ASCII码字符。

四十、666c61 677b616537333538376261353662616566357d题目(bugku,不是md5)

提示,16进制转ascii吗:

a = '666c61677b616537333538376261353662616566357d'

for i in range(0,len(a),2):

print(chr(int(a[i:i+2],16)), end='')

flag{ae73587ba56baef5}

四十一、md5的格式一共是32位,而且是16位的编码方式

四十二、d4e8e5a0f1f5e9e3eba0e2f2eff7eea0e6eff8a0eaf5edf0a0eff6e5f2a0f4e8e5a0ece1faf9a0e4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0c2c4c3d4c6fbd9b0f5dfe1f2e5dff3ede1f2b7fd题目(ASCII码)

for i in range(0,len(a),2):

print(chr(int(a[i:i+2],16)-128), end='')

四十三、

0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121

060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062

0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 题目

for i in a.split():

print(chr(int(i,8)),end='')

V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K

用linux自带的base64解码的方式进行解码:

eb2dd834adadd7d6724fe74cccf32bc2.png

Flag: ISCC{N0_0ne_can_st0p_y0u}

四十四、

d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65'

x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 0151 x66 d116 b101110 b100000

d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 064 o144 o145 d53 x61 b1100010 b1100011

o60 d48 o65 b1100001 x63 b110110 d101 063 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103

d111 d111 x64 d32 o164 b1101001 x6d o145 x7e 题目

b=a.split()

print(b)

flag=''

for i in b:

if i[0]=='d':

flag=flag + chr(int(i[1:]))

if i[0]=='x':

flag=flag + chr(int(i[1:],16))

if i[0]=='o':

flag=flag + chr(int(i[1:],8))

if i[0]=='b':

flag=flag + chr(int(i[1:],2))

print(flag)

四十五、

011001100110110001100001011001110111101101111010011010000100

0101011000110011100100110000001100110011

010001101010011011110110010001110011011010

10011001100110111101110011011010110110111101111101 题目

for i in range(0,len(a),8):

print(chr(int(a[i:i+8],2)),end='')

四十六、字符串常用函数和方法

1、len函数

通过len()函数可以统计字符串中字符的个数, 或者是列表、元组、字典中元素的个数。

as:25d55ad283aa400af464c76d713c07ad  题目

发现这是一个32位的16进制数,所以这是一个md5加密,可以用在线网站进行解密

flag{12345678}

2、max函数和min函数

max()函数用于求取最大值,min()函数用于求取最小值。

字符串按照ASCII码值来比较大小,也可以对列表进行操作

通过key参数可以指定比较大小的依据。 key = len

例如返回列表中长度最大或者是最小的字符串:

3、sorted()函数

sorted()函数用于排序。

如果对字符串排序,则会生成一个列表。

4、reversed()函数

reversed()函数对可迭代对象进行反转,并返回reversed对象。

reversed对象也是可迭代的,通常我们会将它转换成列表,以直观显示。

使用for循环对reversed对象进行遍历

5、split()方法:

split()方法可以将字符串根据某个分隔符进行分割,分割之后会得到一个列表。

split()默认以字符串中的空白符号(包括空格、换行符、制表符等)作为分隔符。

以点作为分隔符进行分割。

6、join()方法

join()的作用与split)相反,用于将字符串连接起来,通常与列表配合使用。

虽然使用"+"将字符串拼接也能起到相同的效果,但join的效率更高。

在拼接时也可以不指定拼接符。

join()配合reversed()函数,实现字符串反转。

7、strip()、rstrip()、 Istrip()方法

strip()方法用于去除字符串头尾指定的字符,如果不指定,则默认是去除空格、回车、换行等空白字符。

rstrip()方法用于去除字符串右端指定的字符。

Istrip()方法用于去除字符串左端指定的字符。

使用这种方法也可以去除指定字符

8、replace()方法

replace()方法可以将字符串中部分指定的字符进行替换。

字符串属于不可变序列,字符串中的内容不允许改变。

-通过replace()方法 会生成新的字符串,原先字符串中的内容保持不变。

9、maketrans()和translate()方法

maketrans()方法用来生成字符映射表

translate()方法按照字符映射表中定义的对应关系, 将字符串中的指定字符进行替换。

使用这两个方法的组合可以同时替换多个不同的字符, replace()方法则无法满足这一要求。

as:

BBBBABBBBBBBBABBAABABAABBBABBBABBBABAABBBAABAABBABBBABABAABABAABABBBAA A,B互换

a='BBBBABBBBBBBBABBAABABAABBBABBBABBBABAABBBAABAABBABBBABABAABABAABABBBAA'

table = ''.maketrans('AB','BA')

print(a.translate(table))

四十七、摩斯密码:

摩斯密码是一-种早期的数字化通信形式,虽然由点"."和横 "-”两种符号组成,

但它不同于现代只使用o和1两种状态的二进制代码。

as:恰恰 恰恰恰 恰绑恰绑 恰 绑绑恰绑{恰恰绑 恰恰恰 恰恰恰 恰绑绑 题目

a = '恰恰 恰恰恰 恰绑恰绑 恰 绑绑恰绑{恰恰绑 恰恰恰 恰恰恰 恰绑绑}'

b = ''.maketrans('恰绑','-.')

print(a.translate(b))

-- --- -.-. - ..-.{--. --- --- -..}

用在线网站解码:https://tool.bugku.com/mosi

四十八、find方法和rfind方法:

find()方法用来查找一个字符串在另一个字符串中首次出现的位置。

rfind()方法用来查找一个字符串在另一一个字符串中最后一次出现的位置。

如果不存在则返回-1

四十九、index()方法和rindex(方法

index()和rindex()方法也是用来返回一个字符串在另一一个字符串中首次出现或者是最后一次出现的位置。

与find()和rfind()方法不同的是,如果指定的字符串不存在,index()方法会抛出异常,而不是输出-1

五十、startswith()和endswith()方法

这两个方法用来判断字符串是否以指定的字符串开始或结束。

endswith()方法通常用于检测文件的扩展名

在这两个方法中可以使用元组的形式指定多个字符串作为判断的依据。

五十一、upper()、lower()和swapcase()方法

upper)方法可以将字符串转换成大写形式

lower()方法可以将字符串转换成小写形式

swapcase()方法可以实现大小写互换

注意,这几个方法都是生成新字符串,而并不对原字符串做任何改动。

五十二、isupper()和islower()方法

isupper()方法用于判断字符串是否是大写字母

islower()方法用于判断字符串是否是小写字母

五十三、isalpha()、isdigit()、 isalnum()方法

isalpha()方法用于判断字符串是否是字母

isdigit()方法用于判断字符串是否是数字

isalnum()方法用于判断字符串是否是由字母或数字组成的

五十四、

编写一个程序,完成下列要求:

(1)程序执行时输出提示信息"Please input yes or no:”

(2)如果用户输入"yes" (不区分大小写) ,则输出"continue”

(3)如果用户输入"no”(不区分大小写) ,则输出"exit"

提示:

(1)要考虑大小写的问题。

(2)要考虑用户输入的信息中可能会含有多余的空格。a = input('Please input yes or no: ')

b = a.lower().strip() 大小写和空格问题处理方法

if b == 'yes' :

print('continue')

elif b == 'no' :

print('exit')

else:

print('请查看提示信息,输出正确的信息')

五十五、培根密码

培根密码是一种简单的替换密码,密文字符只有两个: a和b,每个明文字符都会被替换为一个由a和b组成的长度为5的字符串。

比如明文h被替换后的密文为aabbb

密文字符也可以选择任意两个其它字符

如果看到这种全部由两个字母组成的密文,那么就可以猜测可能是培根密码。

在线解码网站:http:/tool.bugku.com/peigen/

http://rumkin.com/tools/cipher/baconian.php

五十六、count方法:

count()方法用来返回一个字符串在另一个字符串中出现的次数,如果不存在则返回0。

五十七、centen()、ljust()、 rjust()方法

center()方法可以返回指定宽度的新字符串,原字符串居中,两侧用指定的字符进行填充。默认情况下,使用空格进行填充。

ljust()和rjust()方法则分别是将原字符串放在最左侧或者是最右侧。

五十八、

试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?

例如,在1到11中,即在1,2,3,4,5,6,7,8,9,10,11中,数字1出现了4次。

n,x = input().split()

num = 0

for i in range(1,int(n)+1):

num = num + str(i).count(x)

print(num)

五十九、字符串格式化输出:

name="张三"

age=18

print("姓名:{}$$年龄:{}".format(name,age))

print("姓名:%s$$年龄:%s" %(name,age))

print(f'姓名:{name}$$年龄:{age}')

s = 'hello,i think python is interesting'

print('##########'+s[14:20]+'##########')

print("{:#^26}".format(s[14:20]))

print("{:#<26}".format(s[14:20]))

print("{:#>26}".format(s[14:20]))

# 序号 填充 对齐 宽度 千位分隔符 精度 %s,%d等(format)

六十、list()函数

通过list()函数可以将字符串、元组、range对象等可迭代对象转换为列表。

将字符串和元组转换为列表

range()函数默认返回的是一个range对象, 用list函数可以将其转换为列表。

六十一、列表与字符串的区别

列表属于可变序列,列表中的元素可以被修改,而字符串则是不可变的。

列表中可以存放多种不同类型的数据。

六十二、列表常用的函数和方法:

1、sum()函数用于求和

2、map()函数可以把一个函数依次映射到序列的每个元素上,并返回-一个map对象作为结果,map对象中每个元素是原序列中元素经过函数处理后的结果。

为了直观显示,通常会将map()对象转换成列表:

map()对象也是可迭代的,可以直接循环遍历:

用input()函数接收多个数据,并转换成数值型再存放到列表中。

获取一个三位数的百位、十位、个位数:

3、append()、extend()方法,通过append()方法可以向列表尾部追加一个元素

4、extend()方法可以将另一个列表中的所有元素追加至当前列表的尾部,通过这种方法可以在列表尾部追加多个元素。

5、append()和extend()方法属于原地操作,可以直接对列表进行修改。

6、利用运算符+和*也可以实现在列表中增加元素的目的,但它们不属于原地操作,而是会返回新列表。

7、+和*的操作速度较慢,在添加大量元素时建议采用append( )和extend( )方法。

六十三、列表

1、列表用[]表示,在列表中可以集中存放多个数据,数据类型不必统一。

2、列表中的数据称为列表的元素,每个元素之间用逗号"间隔。

3、列表中的元素还可以是一个列表、元组或者字典:

4、列表的索引和切片同字符串。

六十四、进制转换1:

ec92c24d327a23085593d9c277895267.png

m,n = input().split()

s =len (n)

flag = f'{n[0]}*{m}^{(s-1)}'

for i in range(s):

if n[i]!='0':

flag = flag + f'+{n[i]}*{m}^{(s-1-i)}'

print(flag)

六十五、进制转换2、

m,n = input().split()

s =len (n)

flag = []

for i in range(s):

if n[i]!='0':

flag = flag.apple(f'{n[i]}*{m}^{(s-1-i)}')

print('+'.join(flag))

六十六、count()、index()方法

如果指定元素在列表中不存在,index()方法会抛出异常。

通过成员测试运算符in也可以测试列表中是否存在某个元素。如果列表中不存在指定的元素,则返回False.

六十七、sort( )、 reversle( )方法

通过sort()方法可以将列表中的元素进行排序, I默认是升序。

通过reverse()方法可以将列表中的元素顺序颠倒,也就是逆序。

这两种方法属于原地操作,经过排序之后,列表中元素原来的顺序全部丢失。

利用sort( )方法进行降序排序需要用到reverse参数

通过sorted( )和reversed( )函数也可以实现排序和逆序,不过这两个函数会生成新的列表,而不对原列表做任何修改。

可以利用sorted( )函数进行排序,也可以利用reversed()函数进行逆序

六十八、小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 (长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉! 所以请你帮小鱼编程解决这个问题。

a = list(input().split())

a.reverse()

a.pop(0)

print(' '.join(a))

六十八、列表推导式

列表推导式,也叫列表解析式,可以使用非常简洁的方式来快速生成满足特定需求的列表。

[表达式 for变量in序列或可迭代对象if条件表达式]

得到字符串"hello"中每个字符的ASCI码值, 并存放到列表中。

六十九、元组元组与列表类似,不同之处在于元组中的数据只能被调用,而不能被修改,元组用( )表示。

元组不可变

使用tuple()函数可以将其它序列转换为元组。

元组没有append()、 extend()以及remove()、 pop()等方法。

通过tuple()函数可以实现将列表冻结,而使用list()函数可以实现将元组融化。

元组的访问和处理速度比列表更快,如果要对大量数据进行遍历,而不需要对其中的元素进行任何修改,那么一般建议使用元组而不是列表。

元组还通常用于为函数传递参数,从而防止在函数中修改元组。

七十、敏感词替换

txt = input()

key = ('暴力','非法','攻击')

for i in key:

if i in txt:

txt =txt.replace(i,'***')

print(txt)

七十一、字典:

字典的表示:

1.adict={"张飞":3000,"赵云":2000,"关羽":7000}

ainfo=[("张飞",3000),("赵云",2000),("关羽",7000)]

2.bdict=dict(ainfo/rdic/tdic)

3.cdict=dict(关羽=7000,赵云=2000)

4.didct={}.fromkeys(('a','b','c'))

5.eidct={}.fromkeys(('a','b','c'),100)

names=["张飞","赵云","关羽"]

sal=[3000,2000,7000]

6.xdic=dict(zip(names,sal))

7.rdic=[["a",1],["b",2],["c",3]]

8.tdic=(("a",1),("b",2),("c",3))

键值查找:ainfo["赵云"]

ainfo.get["赵云"]

修改:ainfo["赵云"]=8000

添加:ainfo["刘备"]=3000

删除:del ainfo["刘备"]

ainfo.pop("赵云")

ainfo.popitem()

ainfo.clear()

成员判断: "赵云" in ainfo

keys 返回所有字典的键

values 返回所有字典的值

items:返回所有字典的键值对 元组

遍历字典:for k,v in ainfo.items():

print((k,v))

update:两个字典的合并,对重复的数据(键)进行数据更新,以新字典的数据为准,对新字典没有的数据,而原字典有的数据,直接加上,原字典没有的数据,新字段有,也直接加上

ainfo update(binfo)

拷贝:ainfo.copy()

setdefault:和ainfo.get()类似,不同点是,如果键不存在于字典中,,将会添加键并将值话为default对应的值

ainfo.setdefault("刘备",3000)

类型:列表 list tuple 元组 字典 dict 集合 set

set 可变集合 frozenset 不可变集合

向集合中添加元素 a.add()

创建一个空集合 set() 创建一个空字典 {} 创建一个空列表 [] 创建一个空元组 ()

删除集合中的元素 a.remove(3)

a.discard(3)

a.pop()

清空集合中的元素 :a.clear()

七十二、摩斯密码解密脚本

txt = input().split()

if '.' in txt:

table = ''.maketrans('.-','01')

txt = txt.translate(table).split()

else:

txt = txt.split()

key = {'01':'A', '1000':'B', '1010':'C','100':'D','0':'E', '0010':'F','110':'G', ' 0000':'H', '00':'I', '0111':'J','101':'K', '0100':'L', '11':'M',

'10':'N', '111' :'0', '0110':'P', '1101':'Q', '010':'R', '000':'S','1':'T', '001':'U', '0001':'V', '011' :'W', '10011011' :'Y', '1100': 'Z',

'01111' :'l', '00111': '2', '00011': '3', ' 00001': '4', ' 00000':'5', '10000':'6', ' 11000':'7', ' 11100': '8', ' 11110': '9', '11111': '0',

'001100':'?','10010':'/','101101':'()','100001':'-','010101':'.', '110011':'', '011010':'@','111000':':', '101010':':', '10001':'=',

'011110' :"'", '101011':'!', '001101':'_ ' , '010010 ':'"', '10110':'(','1111011':'{', '1111101':'}'}

for i in txt:

print(key.get(i),end='')

七十三、培根密码解密脚本

txt = input().lower()

a =["aaaaa ","aaaab", " aaaba","aaabb" , "aabaa" , " aabab" , " aabba" , " aabbb" , " abaaa", "abaab" , " ababa", " ababb", " abbaa" , " abbab" ,

" abbba" , " abbbb", " baaaa" , " baaab" , "baaba" , "baabb", "babaa", "babab" , "babba", "babbb" , "bbaaa" , " bbaab"]

b = 'abcdefghij klmnopqrstuvwxyz'

key= dict(zip(a,b))

for i in range(0,len(txt),5):

print(key.get(txt[i:i+5]),end='')

七十四、集合

集合的底层是字典,集合中的所有元素就是字典中的键,所以集合最主要的特点就是其中的元素不能重复。

集合也采用{}表示,集合中的元素是无序的。

用set()函数可以将其它对象转换为集合

通过remove()方法可以清除集合中的指定元素

通过clear()方法可以清空集合。

计算集合的并集、交集和差集:

七十五、将12.,.,9共99个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

for i in range(100,334):

m = i * 2

n = i * 3

key = str(i) + str(m) + str(n)

flag = set(key)

if '0' not in key and len(flag) == 9 :

print(i,m,n)

七十六、异常处理的几种函数:

SystemExit:python解释器退出

KeyboardInterrupt:用户中断

Exception:常见异常的父类

GeneratorExit:生成器退出

SyntaxError:发生语法错误时引发

FileNotFoundError:未找到指定文件or目录时引发

NameError:找不到指定名称的变量时引发

ZeroDivisionError:除数为0时引发

IndexError:当使用超出列表范围的索引时引发

KeyError:当使用字典不存在的键时引发

AttributeError:当尝试访问未知对象属性时引发

TypeError:当试图在使用a类别的场合使用b类别时引发

七十七、异常处理实例

class FushuException(Exception): #自定义异常

def __init__(self,msg):

self.msg=msg

try:

a=int(input("请输入被除数"))

b=int(input("请输入除数"))

c=a/b

print("%d/%d=%f" %(a,b,c))

except ZeroDivisionError:

print("数据输入有误,除数不能为零")

else:

print("else正常")

finally:

print("finally无论是否异常都执行")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值