佛系计算机二级 & 第四弹

写在前面

不知不觉已经是第四弹了,希望自己能继续坚持下去!!

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时间要少一些了(但是博文都说了,佛系嘛)哪怕每天做一点,做了就行,要求不要辣么高 一个好消息是遇到不会的题,看一遍基本能厘清思路自己重新写下来,坏消息是有些题还是不能独立完成,似乎要好些了,那还是加油吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生苦短我愛Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值