Python内置函数

strip()

strip()函数是字符串对象的一个方法,用于删除字符串两端的指定字符(默认为空格)或字符序列。

具体来说,strip()函数的作用是:

如果不提供任何参数,则默认删除字符串两端的空格和换行符。
如果提供参数,参数是一个字符或字符序列,那么函数将删除字符串两端连续出现的该字符或字符序列。
以下是一些示例来说明strip()函数的使用:

1
2
3
4
5
6
7
8
9
10
11
s = "   Hello, World!   "
print(s.strip()) # 输出: "Hello, World!",删除了两端的空格

s = "********Hello********"
print(s.strip('*')) # 输出: "Hello",删除了两端的星号

s = "ABCDEFABCDEF"
print(s.strip('AB')) # 输出: "CDEFABCDEF",删除了开头的'A'和结尾的'B'

s = "ABCDEFABCD"
print(s.strip('ABCD')) # 输出: "EF",删除了开头的'A'和结尾的'D'

需要注意的是,strip()函数返回一个新的字符串,并不改变原始字符串。如果想要删除字符串内部的特定字符,可以考虑使用replace()函数或正则表达式来实现。

readlines()

readlines()是文件对象的方法,用于读取文件的所有行并将其存储在一个列表中。每一行都是列表中的一个元素。

具体来说,readlines()函数的行为如下:

当文件对象调用readlines()时,它将从当前文件位置开始读取,直到文件的末尾。
它会读取每一行,并将每一行作为一个字符串存储在列表中。
列表中的每个元素对应于文件中的一行文本。
以下是一个简单的示例来说明readlines()函数的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 打开文件
file = open("example.txt", "r")

# 使用readlines()读取文件所有行并存储在列表中
lines = file.readlines()

# 关闭文件
file.close()

# 遍历列表并打印每一行
for line in lines:
print(line)

# 输出文件的总行数
print("文件总行数:", len(lines))

在上面的示例中,我们打开了一个名为"example.txt"的文本文件,并使用readlines()函数读取了所有的行。然后,通过遍历列表lines,我们打印出了每一行的内容。最后,使用len(lines)获取列表的长度,即文件的总行数。
需要注意的是,readlines()将整个文件读取到内存中,如果文件非常大,可能会占用较多的内存。在处理大型文件时,可能需要考虑逐行读取文件,以节省内存资源。

index()

index()函数是列表(或字符串)的一个方法,用于返回指定元素(或字符)在列表(或字符串)中首次出现的索引位置。

具体来说,index()函数的行为如下:

对于列表对象,index()函数接受一个参数,即要查找的元素,并返回该元素在列表中的索引位置。
对于字符串对象,index()函数接受一个参数,即要查找的字符(或字符序列),并返回该字符(或字符序列)在字符串中首次出现的索引位置。
以下是一些示例来说明index()函数的使用:

对列表使用index()函数:

1
2
3
4
5
6
fruits = ['apple', 'banana', 'orange', 'apple', 'mango']

print(fruits.index('apple')) # 输出: 0,'apple'首次出现在索引位置0
print(fruits.index('orange')) # 输出: 2,'orange'首次出现在索引位置2
print(fruits.index('mango')) # 输出: 4,'mango'首次出现在索引位置4
对字符串使用index()函数:
1
2
3
4
5
s = 'Hello, World!'

print(s.index('o')) # 输出: 4,'o'首次出现在索引位置4
print(s.index('W')) # 输出: 7,'W'首次出现在索引位置7
print(s.index('l')) # 输出: 2,'l'首次出现在索引位置2

需要注意的是,如果要查找的元素或字符在列表或字符串中不存在,index()函数将引发ValueError异常。可以使用异常处理机制来处理这种情况。另外,如果要查找多次出现的元素或字符的索引位置,可以结合切片等其他方法进行进一步处理。

数据格式化与Python计算生态

读文件

用Windows“记事本”创建一个文本文件,其中每行包含一段英文。试读出文件的全部内容,并判断:
(1)该文本文件共有多少行?
(2)文件中以大写字母P开头的有多少行?
(3)一行中包含字符最多的和包含字符最少的分别在第几行?
‍如:记事本内容为:
A lot of people today are animal rights advocates.
Some of them are very
Passionate and even quite radical about the issue.
But others argue that “human rights” will always
take priority. In fact, in many places even
the most basic human rights are not adequately
Protected. So why animal rights? What do you
think? And why?
运行结果为: 该文本文件共有有8行
文件中以大写字母P开头的有2行
包含字符最多的是第1行
包含字符最少的是第8行

解法1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def line():
f = open("English.txt",'r',encoding='utf-8') # 打开名为"English.txt"的文本文件,以只读模式打开
lines = f.readlines() # 读取文件的所有行并将其存储在名为lines的列表中
count = len(lines) # 统计列表lines的长度,即文本文件的行数,并将其存储在count变量中
print("这文本文件共有:",count,"行") # 打印输出文本文件的行数

def search():
f = open("English.txt",'r',encoding='utf-8') # 打开名为"English.txt"的文本文件,以只读模式打开
lines = f.readlines() # 读取文件的所有行并将其存储在名为lines的列表中
n = 0 # 初始化计数器n为0
for line in lines: # 遍历lines列表中的每一行,将当前行存储在line变量中
if line[0] =='P': # 判断当前行的首字母是否为大写字母P
n=n+1 # 如果是,则计数器n加1
print("文件中以大写字母P开头的有",n,"行") # 打印输出以大写字母P开头的行数

def r():
f = open("English.txt",'r',encoding='utf-8') # 打开名为"English.txt"的文本文件,以只读模式打开
lines = f.readlines() # 读取文件的所有行并将其存储在名为lines的列表中
l = [] # 创建一个空列表l用于存储每行字符的数量
for i in lines: # 遍历lines列表中的每一行,将当前行存储在变量i中
num = len(i.strip()) # 统计当前行去除首尾空格后的字符数量,并将其存储在num变量中
l.append(num) # 将num添加到列表l中
print("一行中字符最多的在第",l.index(max(l))+1,"行") # 打印输出字符数量最多的行号
print("一行中字符最少的在第",l.index(min(l))+1,"行") # 打印输出字符数量最少的行号

line() # 调用line函数
search() # 调用search函数
r() # 调用r函数

解法2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
f=open("k:\\python2019.2\\第7章作业\\english.txt")
m,n=0,0
s=[]
while True:
line=f.readline()
if line=="":
break
n+=1
ls=list(line)
if ls[0]=='P':
m+=1
s.append(len(line))
a1=s.index(max(s))
a2=s.index(min(s))
print("该文本文件共有有{}行".format(n))
print("文件中以大写字母P开头的有{}行".format(m))
print("包含字符最多的是第{}行".format(a1+1))
print("包含字符最少的是第{}行".format(a2+1))

读csv文件并调用

将以下数据存储到const.csv文件中

星座,开始月日,结束月日,Unicode

水瓶座,120,218,9810

双鱼座,219,320,9811

白羊座,321,419,9800

金牛座,420,520,9801

双子座,521,621,9802

巨蟹座,622,722,9803

狮子座,723,822,9804

处女座,823,922,9805

天秤座,923,1023,9806

天蝎座,1024,1122,9807

射手座,1123,1221,9808

摩羯座,1222,119,9809

请编写程序,读入CSV文件中数据,循环获得用户输入,直至用户直接输入“Q”退出。根据用户输入的星座名称,输出此星座的出生日期范围及对应字符形式。
如果输入的名称有误,请输出“输入星座名称有误!”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
ls=[
["星座","开始月日","结束月日","Unicode"],

['水瓶座','120','218','9810'],

['双鱼座','219','320','9811'],

["白羊座",'321','419','9800'],

['金牛座','420','520','9801'],

['双子座','521','621','9802'],

['巨蟹座','622','722','9803'],

['狮子座','723','822','9804'],

['处女座','823','922','9805'],

['天秤座','923','1023','9806'],

['天蝎座','1024','1122','9807'],

['射手座','1123','1221','9808'],

['摩羯座','1222','119','9809']

]

f=open("const.csv","w")
for row in ls:
f.write(",".join(row)+"\n")
f.close()
f=open("const.csv","r")
ls1=[]#csv文件的存储
for line in f:
ls1.append(line.strip("\n").split(","))
f.close()
list1=[]
while True:
xingzuo=input("请输入星座(例双子座):")

if xingzuo=="Q":
break
else:
print("你输入的是"+xingzuo.title())
list1.append(xingzuo.title())
for i in list1:
for m in ls1:#行
for n in m:#列
if i==n:
print("{}的开始日期是{},结束日期是{},符号是{:}".format(m[0],m[1],m[2],m[3]))

统计最长行的长度和该行的内容。

示例:

文本文件名为 sample.txt ,内容为:

123

asdfg

zxcvbnm

uiop1

程序运行结果为:
[8,‘zxcvbnm\n’]

1
2
3
4
5
6
7
8
9
10
11
12
13
file_name = 'sample.txt'
max_length = 0
max_line = ''

with open(file_name, 'r', encoding='utf-8') as file:
for line in file:
line_length = len(line)
if line_length > max_length:
max_length = line_length
max_line = line

result = [max_length, max_line]
print(result)

自上而下结构

线性回归方程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
years = [2000, 2015, 2016]
revenue = [13395.2, 152269.2, 159605]
expenditure = [15886.5, 175877.8, 187755.2]
n=len(years)
sum_x=sum(years)
sum_y=sum(revenue)
sum_z=sum(expenditure)
sum_xy=sum(x * y for x, y in zip(years, revenue))
sum_xz=sum(x * y for x, y in zip(years, expenditure))
sum_xx=sum(x ** 2 for x in years)
aver_x=sum_x/n
aver_y=sum_y/n
aver_z=sum_z/n
b_1=(sum_xy-n*aver_x*aver_y)/(sum_xx-n*aver_x*aver_x)
a_1=aver_y-b_1*aver_x
b_2=(sum_xz-n*aver_x*aver_z)/(sum_xx-n*aver_x*aver_x)
a_2=aver_z-b_2*aver_x
p_year = 2021
p_y1=b_1*p_year+a_1
p_z1=b_2*p_year+a_2
print("预测未来一年的收入:", p_y1)
print("预测未来一年的支出:", p_z1)

b=i=1nxiyinxˉyˉi=1nxi2nxˉ2,a=yˉbxˉb=\frac{\sum_{i=1}^nx_iy_i-n\bar{x}\bar{y}}{\sum_{i=1}^nx_i^2-n\bar{x}^2},a=\bar{y}-b\bar{x}

y^=bx^+a\hat{y}=b\hat{x}+a

模拟比赛

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import random
def simulate_pingpong_match(player1_ability, player2_ability, num_matches):
player1_wins = 0
player2_wins = 0

for _ in range(num_matches):
player1_score = 0
player2_score = 0

while player1_score < 11 and player2_score < 11:
if random.random() < player1_ability:
player1_score += 1
else:
player2_score += 1

if player1_score > player2_score:
player1_wins += 1
else:
player2_wins += 1

return player1_wins, player2_wins
player1_ability = eval(input("请输入选手1能力值(0-1):"))
player2_ability = eval(input("请输入选手2能力值(0-1):"))

num_matches = int(input("请输入比赛次数:")) # 模拟比赛的次数

player1_wins, player2_wins = simulate_pingpong_match(player1_ability, player2_ability, num_matches)

player1_win_ratio = player1_wins / num_matches
player2_win_ratio = player2_wins / num_matches

print('选手1获胜{}场比赛,占比{:0.1%}'.format(player1_wins,player1_win_ratio))
print('选手2获胜{}场比赛,占比{:0.1%}'.format(player2_wins,player2_win_ratio))

模拟雪景图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import turtle
import random

screen = turtle.Screen()
screen.setup(800, 600)
screen.bgcolor('skyblue')

pen = turtle.Turtle()
pen.speed(0) # 设置绘制速度,0为最快

def draw_snowflake(size):
pen.color('white')
pen.begin_fill()
for _ in range(8):
pen.forward(size)
pen.backward(size)
pen.right(45)
pen.end_fill()

for _ in range(20):
x = random.randint(-400, 400)
y = random.randint(-250, 250)
size = random.randint(10, 40)
pen.penup()
pen.goto(x, y)
pen.pendown()
draw_snowflake(size)

pen.hideturtle()

turtle.done()