写在前面
不知不觉已经是第四弹了,希望自己能继续坚持下去!!
Python Round④
两点距离(保留一位小数)
ntxt = input("请输入4个数字(空格分隔):")
nls = ntxt.split(" ")
x0 = eval(nls[0])
y0 = eval(nls[1])
x1 = eval(nls[2])
y1 = eval(nls[3])
r = pow(pow(x1-x0, 2) + pow(y1-y0, 2),0.5)
print("{:.1f}".format(r))
- split()方法返回的是一个列表,因此不用再考虑nls[0]的问题
- 保留一位小数{:1f}
- pow(x,y)返回 x 的 y 次方
jieba库的使用
import jieba
txt = input("请输入一段中文文本:")
ls = jieba.lcut(txt)
print("{:.1f}".format(len(txt)/len(ls)))
用len()获取总文本和列表(即词语个数)长度
获得Unicode编码字符
n = eval(input("请输入一个数字:"))
print("{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))
- 将Unicode转为其对应的字符,需要用到chr()函数,chr(i)表示返回Unicode编码为i的字符
- 题目要求输出三个Unicode编码对应的字符,可以用“+”字符将其连接起来
turtle库
import turtle
d = 0
for i in range(4):
turtle.fd(200)
d = d+90 #我写的是i*90+90,也可以实现上述功能
turtle.seth(d)
while(跳出循环)
fo = open("PY202.txt","w",encoding = "utf-8")
data = input("请输入课程名及对应的成绩:") # 课程名 考分
d = {}
while data:
kemu,score = data.split(" ")
d[kemu] = eval(score)
data = input("请输入课程名及对应的成绩:")
ls = sorted(d.values())
max,min = ls[-1],ls[0]
maxkemu,minkemu = "",""
for i in d.items():
if i[1] == max: #由于是i遍历的是元组,故要用i[1]来定位
maxkemu = i[0]
if i[1] == min:
minkemu = i[0]
aver = sum(ls)/len(ls) #求和新方式
fo.write("最高分课程是{0} {1}, 最低分课程是{2} {3}, 平均分是{4:.2f}".format(maxkemu,max,minkemu,min,aver))
fo.close()
乍一看还挺多挺难(好吧对于我来说确实有点点… )
但是思路还是清晰的,有几个要点罗列如下:
- 这道题和Round②的套路是一样的,也是通过“while data”实现一个列表的存储与输出,而且记得是在while data后将列表内容进行定义:
while data: #这里的是Round2的示例
name,sex,age = data.split(" ")
- 这里使用的是生成一个d={}来接收数据,而非像Round②中:
woman_num = 0
total_num = 0
total_age = 0
一是方便后文计算,二是三个元素不能生成键值对。故在此总结如下:
当所考虑元素为3时,考虑round2的做法;当所考虑元素为2时,考虑生成字典来求
- while data步中,主要目的就是生成字典,生成后即可跳出循环
- 第二步将数字部分进行排序,sorted()默认升序,故最大的元素在最末尾,且只涉及数字部分,故用的是d.values(),采用ls[-1]、ls[0]来接收
- 求和除了Round②的 total += int(age),还可以如本题所示sum()来进行计算
综合练习
提取内容
fi = open('sensor.txt', 'r')
fo = open('earpa001.txt', 'w')
txt = fi.readlines()
for line in txt:
ls = line.strip("\n ").split(",")
if " earpa001" in ls:
fo.write('{},{},{},{}\n'.format(ls[0],ls[1],ls[2],ls[3]))
fi.close()
fo.close()
- 这里有个小坑,找了好半天没找到:所需要检验的字符串前面有一个空格,所以下次遇到截取的这种还是复制粘贴内容要保险些
截取生成新组合+计数
fi = open("earpa001.txt","r")
fo = open("123.txt","w",encoding="utf-8")
d = {}
for i in fi:
sss = i.strip("\n ").split(",")
menpai = sss[-2]+"-"+ sss[-1]
if menpai in d:
d[menpai] += 1
else:
d[menpai] = 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序
for i in range(len(ls)):
fo.write('{},{}\n'.format(ls[i][0],ls[i][1]))
fi.close()
fo.close()
- 题项要求行尾无空格、无空行,所以strip("\n ")后还要附加上一个空格
- 得看题目怎么要求的,这里打开的文件是基于第一题所做的文件(害得我找了好半天为什么错)
总结
近期做Python时间要少一些了(但是博文都说了,佛系嘛)哪怕每天做一点,做了就行,要求不要辣么高 一个好消息是遇到不会的题,看一遍基本能厘清思路自己重新写下来,坏消息是有些题还是不能独立完成,似乎要好些了,那还是加油吧!