Python_Mooc_Stu_23_11_13_String_Random

发布时间 2023-11-13 19:21:01作者: SouthDream

目录

一、序列 

(一)序列的索引 

1.索引编号 

2.序列元素索引访问

3.注意事项 

(二)序列的切片 

1.切片格式 

2.切片使用 

3.参数缺省 

二、序列的运算和常用处理函数 

(一)序列运算 

1.序列相加 

2.序列相乘 

3.序列对象比较 

4.成员资格检查 

(二)常用处理函数 

1.len() 

2.min() 

3.max() 

4.sum() 

5.enumerate() 

6.sorted() 

7.all() 

8.reduce() 

9.zip() 

10.reversed() 

11.any() 

(三)序列拆分赋值 

三、字符串的创建、基本操作与方法 

(一)字符串的创建 

1.预定义 

2.input输入 

3.文件读入 

4.字符串常量 

(二)字符串基本操作 

1.序列类操作 

2.逻辑操作、关系操作 

3.成员关系操作 

(三) 字符串方法 

四、random模块 1

1.常用函数 

一、序列

定义:Python中字符串、列表和元组数据类型均属于序列类型;

特点:它们的每个元素是按照位置编号来顺序存取的;

操作:索引、切片、序列相加、序列相乘、检查某元素是否为序列成员、计算序列长度等;

注释:Python的序列类型类似于其他程序设计语言中的数组,但数组通常存储相同数据类型的元素,而列表和元组等序列则可以存储不同类型的元素。

(一)序列的索引

1.索引编号

方向

解释

第一个元素编号

最后一个元素编号

区间

正向索引

从左向右

0

n-1

[0 , n-1]

反向索引

从右向左

-n

-1

[-n , -1]

2.序列元素索引访问:

序列名[索引]

3.注意事项

①下标越界;

②索引必须是整数,若索引由计算得到,一定要注意计算结果是否是整数(强制类型转换、整除);

(二)序列的切片

定义:去除序列中的某一范围内的元素,从而得到一个新的序列;

1.切片格式

序列名[起始索引:终止索引:步长]

注:

①起始索引是提取部分的第一个元素编号;

②[起始索引:终止索引]是左闭右开区间,即不包括终止索引所指向的元素;

2.切片使用

(1)左向右提取

起始索引

终止索引

步长

左侧编号

右侧编号

正数

>>>Data = (12,8,3,4,6,4,64,1,86,1,64,34,61,9,89,467,6,6614,314,344)
>>>Newdata = Data[0:10:2]
>>>print(Newdata)
(12, 3, 6, 64, 86)

(2)右向左提取

起始索引

终止索引

步长

右侧编号

左侧编号

负数

>>>Data = (12,8,3,4,6,4,64,1,86,1,64,34,61,9,89,467,6,6614,314,344)
>>>Newdata = Data[6:0:-1]
>>>print(Newdata)
(64, 4, 6, 4, 3, 8)

3.参数缺省

缺省起始索引

缺省终止索引

缺省步长

第一个元素

到最后一个

1

三个参数可以任意缺省,但是中间的两个冒号(:)不可以缺省

二、序列的运算和常用处理函数

(一)序列运算

1.序列相加

Def:两个序列相加,即两个序列连接;

Note:只有两个序列属于同种数据类型才能进行连接,如两个字符串,两个元组等;

(1)String.format()

>>>text = '{:s}{:s}{:s}'.format('python' , '_' , 'Program')
>>>print(text)
python_Program

(2)String.join()

#利用join前面的字符串连接后面的单词,在中间起到连接作用;
>>>text = '_'.join(['Python','M','Program'])
>>>print(text)
Python_M_Program

(3)+号

#从键盘输入5个字符串后,将它们连接在一起输出
>>>s = ""
>>>for i in range(5):
>>>    x = input("please input a string:")
>>>    x += " "
>>>    s += x
>>>print(s)

please input a string:this
please input a string:is
please input a string:a
please input a string:test
please input a string:!
this is a test !

2.序列相乘

Def:用整数n乘以一个序列会生成新的序列,在新序列中,原来的序列将重复n次;

Note:

①当小括号中只用一个元素时,当结尾有逗号为元组,没有逗号则是普通数学运算中的小括号;

>>>(42,)*5 #tuple
(42,42,42,42,42)

>>>(42)*5 #number
210

②Python内置值None表示什么都没有,可用作占位符。空列表可以用[]表示;但是想创建一个占用10个元素空间,却不包含任何内容的列表,则需要使用None代表空值;

#空列表相乘还是空列表
>>>s1 = []*5
>>>print(s1)
[]

#空值列表不空
>>>s2 = [None]*5
>>>print(s2)
[None, None, None, None, None]

3.序列对象比较

Def:两个序列对象可以进行比较操作,其规则是两个序列的第一个元素先进行比较,如果第一个元素可以得出结果,就得出序列比较结果,如果第一个元素一样,则继续比较下一个元素。

4.成员资格检查

Def:成员资格用于检查一个值是否包含在某个序列中,Python使用in运算符检查元素的成员资格,并返回逻辑型的结果(True或False)。

(二)常用处理函数

1.len()

返回序列s中包含元素的个数,即序列长度。

2.min()

返回序列s中最小的元素。

3.max()

返回序列s中最大的元素。

4.sum()

这个函数用于计算一个序列中所有元素的和。例如,如果你有一个列表包含数字,sum()函数将返回这些数字的和。

numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total) # 输出:15

5.enumerate()

这个函数用于为序列中的每个元素提供一个索引,返回一个枚举对象。通常与循环一起使用,可以方便地获取序列中的索引和值。

numbers = [1, 2, 3, 4, 5]
for i, num in enumerate(numbers):
print(f"Index: {i}, Number: {num}")

6.sorted()

这个函数用于对序列进行排序,返回一个新的已排序的列表。如果原序列是已排序的,sorted()函数将返回原序列。

numbers = [5, 1, 9, 3, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出:[1, 3, 5, 7, 9]

7.all()

这个函数用于检查一个容器(如列表、元组等)的所有元素是否都为True。如果是,返回True,否则返回False。

numbers = [1, 2, 3, 4, 5]
print(all(num > 0 for num in numbers)) # 输出:True

8.reduce()

这个函数用于对一个序列中的项进行累积计算。它需要一个函数和一个序列作为输入,然后使用该函数连续地应用在序列的项上。在Python中,它通常与内置的函数如sum()或append()一起使用。从Python 3开始,reduce()函数移到了functools模块中。

from functools import reduce
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda a, b: a + b, numbers)
print(total) # 输出:15

9.zip()

这个函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
print(zip(names, ages)) # 输出:[('Alice', 25), ('Bob', 30), ('Charlie', 35)]

10.reversed()

这个函数用于返回一个反转后的序列。注意这并不会在原地(in-place)反转序列,而是返回一个新的反转后的序列。

numbers = [1, 2, 3, 4, 5]
reversed_numbers = reversed(numbers)
print(list(reversed_numbers)) # 输出:[5, 4, 3, 2, 1]

11.any()

这个函数用于检查一个条件是否满足。如果给定的所有元素至少有一个满足条件(即返回True),则返回True。否则返回False。需要注意的是,any()函数只接受布尔类型的输入(例如,表达式或布尔值)。如果给定的参数不是布尔类型,Python会尝试隐式地进行转换。如果给定的参数是多个,any()函数将返回True如果其中任何一个参数为True。如果所有参数都为False,则any()函数返回False。

(三)序列拆分赋值

使用赋值语句,可以将序列赋给一个变量,也可以将序列拆分,赋给多个变量。

#变量与序列元素数量一致
>>>a,b,c,d,e=(1,2,3,4,5)
>>>print(a,b,c,d,e)

1 2 3 4 5 #变量与序列元素数量不一致 #可以在变量名前加“*”,将序列的多个元素值赋给相应的变量; #加“*”号的变量一次拆分中只能出现一个 >>>a,b,*c,d=[1,2,3,4,5] >>>print(a,b,c,d)
12[3,4]5

三、字符串的创建、基本操作与方法

(一)字符串的创建

Python中字符串不可变;

1.预定义

程序中使用单引号、双引号、三引号直接定义;

其中三引号字符串在输出时会完全保持定义时的格式(原封不动);

2.input输入

input()函数从键盘中读入的数据均为字符串格式;

3.文件读入

用上下文管理器with和open()函数可以打开一个文件并创建一个文件对象。用循环的方法进行遍历输出,每次循环把其中一行读取为一个以换行符“\n”结尾的字符串。

with open('asd.txt','r',encoding='utf-8') as file:
    for line in file:          #遍历文件对象中的每一行
        print(line)              #每行为一个字符串\n换行

4.字符串常量

字符串常量

字符集

string.ascii_lowercase

'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

string.ascii_letters

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

string.digits

'0123456789'

string.hexdigits

'0123456789abcdefABCDEF'

string.octdigits

'01234567'

string.punctuation

'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

string.whitespace

' \t\n\r\x0b\x0c'

string.printable

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

(二)字符串基本操作

1.序列类操作

支持序列的索引、切片、连接、重复、最大值、最小值、测试长度、存在性测试等操作。

注:

问题:字符串使用“+”进行连接效率较低;

原因:Python中字符串为不可变类型,使用“+”会不停生成新的字符串,不停申请空间;

解决:使用format或者join函数进行字符串连接(见上文String.format()和String.join());

2.逻辑操作、关系操作

字符串的逻辑操作是指字符串参与逻辑比较,其操作结果是一个逻辑重,常用于表达字符处理的条件。

字符比较是按其计算机内部字符编码值的大小进行比较。

基本规则:空格字符<数字<大写字母<小写字母。

3.成员关系操作

in和not in

字符串方法

Python中字符串不可变,因此使用任何函数进行操作后都是返回一个新的字符串,原字符串将不变。

方法

描述

capitalize()

将字符串的第一个字符转换为大写

swapcase()

将字符串中大写转换为小写,小写转换为大写

upper()

转换字符串中的小写字母为大写

lower()

转换字符串中所有大写字符为小写.

title()

返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

zfill (width)

返回长度为 width 的字符串,原字符串右对齐,前面填充0

center(width, fillchar)

返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。

ljust(width[, fillchar])

返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。

rjust(width,[, fillchar])

返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串

count(str, beg= 0,end=len(string))

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

find(str, beg=0, end=len(string))

检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1

index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在字符串中会报一个异常。

rfind(str, beg=0,end=len(string))

类似于 find()函数,不过是从右边开始查找.

rindex( str, beg=0, end=len(string))

类似于 index(),不过是从右边开始.

startswith(substr, beg=0,end=len(string))

检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。

endswith(suffix, beg=0, end=len(string))

检查字符串是否以 suffix 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False。

replace(old, new [, max])

把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。

expandtabs(tabsize=8)

把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。

isalnum()

如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False

isalpha()

如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False

isdecimal()

检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

isdigit()

如果字符串只包含数字则返回 True 否则返回 False..

islower()

如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

isnumeric()

如果字符串中只包含数字字符,则返回 True,否则返回 False

isspace()

如果字符串中只包含空白,则返回 True,否则返回 False.

istitle()

如果字符串是标题化的(见 title())则返回 True,否则返回 False

isupper()

如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

join(seq)

以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

len(string)

返回字符串长度

maketrans()

创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

max(str)

返回字符串 str 中最大的字母。

min(str)

返回字符串 str 中最小的字母。

lstrip()

截掉字符串左边的空格或指定字符。

rstrip()

删除字符串末尾的空格或指定字符。

strip([chars])

在字符串上执行 lstrip()和 rstrip()

split(str="", num=string.count(str))

以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串

splitlines([keepends])

按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

translate(table, deletechars="")

根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中

四、random模块

1.常用函数

函数

描述

random.seed()

初始化随机数生成器,缺省时用系统时间做种子

random.randint(a,b)

产生[a,b]之间的一个随机整数,包括b

random.random()

产生[0.0,1.0)之间的一个随机浮点数

random.uniform(a,b)

产生[a,b)之间的一个随机浮点数

random.randrange(stop)

从[O-stop)(不包括stop)中随机产生一个整数

random.randrange(start,stop,step)

从[start-stop),步长为step的序列里随机产生一个整数

random.choice(seq)

从非空序列seq中随机产生一个元素,当序列为空时,抛出索引错误

random.choices(population,k)

从population中返回大小为k的元素列表

random.shuffle(x[,random])

将序列顺序打乱

random.sample(population,k)

从列表、元组、字符串、集合、range对象等分布式序列中随机选取k个元素,以列表形式返回。

示例:生成产品序列号,序列号由五组被分隔、由字母数字混合的字符串组成;每组序列号是由五个字符串组成;每个字符是取自于以下24个字母及数字之中的一个:BCEFGHJKMPQRTVWXY2346789

import random
characters='BCEFGHJKMPQRTVWXY2346789'
keySn=''                #创建一个空字符串,用于保存序列号
for i in range(5):
    s =''                   #每次循环产生一个字符,每5个字符为一个字符串
    for j in range(5):
        s=s + random.choice(characters)
    if i==0:                #判断是否为第一个字符串
        keySn=s
    else:                           #非第一个字符串时,用“”连接字符串
        keySn = keySn+'-' + s
print(keySn)

EWBF3
-PMBK3-QG3T8-J6RK6-HR8YH