PTA习题练习4

忙碌了许久,总结一下第四次练习题里面的题目吧

我们先更新编程题

7-1 求出歌手的得分

n=int(input())
list1=sorted(list(map(int,input().split())),reverse=True)
list1.pop(0)
list1.pop(0)
list1.pop(len(list1)-1)
list1.pop(len(list1)-1)
# print(list1)
print("aver={:.2f}".format(sum(list1)/(n-4)))

注意要去掉两个最高分和最低分!!

7-2 输出字母在字符串中位置索引

str1=input()
str1=str1[::-1]

a,b=input().split()
for index,i in enumerate(str1):
    if i==b:
        print("{} {}".format(len(str1)-index-1,b))
    if i==a:
        print("{} {}".format(len(str1)-index-1,a))

乍一看是水题,仔细一看其实不审题还真做不对

题目是要求所有目标字符的下标,而且从大到小输出

所以我们考虑倒置字符串即可,然后想办法获取他原本的下标即可

7-3 汉字表示的大写数字金额

list1=list(input())
# print(s)
list1_len=len(list1)
dict1={
    0:"零",
    1:"壹",
    2:"贰",
    3:"叁",
    4:"肆",
    5:"伍",
    6:"陆",
    7:"柒",
    8:"捌",
    9:"玖"}

for i in range(list1_len):
   index=list1_len-i
   print(dict1[ord(list1[i])-48],end="")
   if index==9:
    print("亿",end="")
    continue
   if list1_len-i==5:
    print("万",end="")
    continue
   if  index==6 or index==2 or index==10:
    print("拾",end="")
   elif  index==7 or index==3 or index==11:
    print("佰",end="")
   elif  index==8 or index==4 or index==12:
    print("仟",end="")
print("圆")

这道题其实没太难,每个位输出对应数字汉字,然后限制了最大位数

穷举每一种方法

7-4 输出元组内指定值

list1=list(map(int,input().split()))
for i in list1:
    if i%7==0 or i%10==7:
        print(i)

7-5 字符替换

str1=input()
##65 90
for i in str1:
    if i>="A" and i<="Z":
        print(chr(155-ord(i)),end="")
    else:
        print(i,end="")

chr( )和ord( )函数

7-6 使用字符串的索引和切片知识输入月份数字,输出英文月份缩写

不写

7-7 jmu-python-凯撒密码加密算法

str1=input()
n=int(input())
for i in str1:
    if i.isalpha()==True:
        if chr(ord(i)+n).isalpha()==False:#这一步是关键,容易忘记
            print(chr(ord(i)+n-26),end="")
        else:
            print(chr(ord(i)+n),end="")
 
    else:
        print(i,end="")

 主要是判断字符ASCII偏移多少位之后的字符是否还在字母表里面

使用.isalpha()判断

超过了减去26即可(不过这样要对n取模,不然会有潜在的错误,比如取n=52)

7-8 特定数之和

num=int(input())
def is_num(n):
    while(n!=0):
        if n%10==2 or n%10==0 or n%10==1 or n%10==9:
            return True
        n//=10
    return False

sum=0
for i in range(1,num+1):
    if is_num(i)==True:
        sum+=i
print(sum)

7-9 缩写期刊名

n=int(input())
for i in range(n):
    str1=input().lower()#转为小写
    list1=str1.split()
    ans=[]
    for j in list1:
        if len(j)>4:
            ans.append(j[0:4]+".")
        else:
            ans.append(j)
    print(" ".join(i for i in ans))

判断长度即可

7-10 统计输入字符串中的单词个数及单词的平均长度

def all_list(arr):
    ans={}
    for i in set(arr):
        ans[i]=arr.count(i)
    return ans

ans=input()
num=len(list(ans.split()))
#求单词长度
str1="".join(ans.split())
lens=len(str1)
#求字母个数
aph_num=len(set(str1))
 
print("{},{:.2f}".format(num,lens/num))
 
 

别学我,一开始没看清题目写了半天写了个屎代码出来!!

理解题目很重要

7-11 jmu-python-输入输出-格式化输出字符串

float1=input()    
int1=input()
str1=input()
a=float(float1)   
print("%.2f"%a)
print("%e %E %.2f%%"%(a, a, a*100))
print("{0:b}".format(int(int1)), end="")   
print(" %x"%int(int1))
c=str.strip(str1)
print(str.upper(c))
print("%20s"%c)
print(c.center(20, "*"))   
print("{} + {} = {}".format(a, int(int1), a+int(int1)))

这有些东西我一开始也不知道,后面看的答案,这题能学到很多奇奇怪怪的格式输出方式

7-12 计算有n个字符串中最长的字符串长度

n=int(input())
max_len=-1
for i in range(n):
    str1=input().strip()
    if len(str1)>max_len:
        max_len=len(str1)
print("length={}".format(max_len))

去掉两边空格 即可

.strip()

7-13 统计单词的个数

不写

7-14 输出10个不重复的英文字母

s = input()
b = []
for i in s:
    if i.isalpha() and (i.upper() not in b) and (i.lower() not in b):
        b.append(i)
str = "".join(b)
if len(str)>=10:
    print(str[:10])
else:
    print("not found")

把遍历到的所有元素转成小写看一看是不是在列表里面即可

长度只有大于等于10正常输出 

7-15 判断两个字符串是否为变位词

str1=input()
str2=input()
#只集合不能满足所有要求
dic1={}
dic2={}
for i in str1:
    dic1[i]=dic1.get(i,0)+1
for i in str2:
    dic2[i]=dic2.get(i,0)+1
dict1=sorted(dic1)
dict2=sorted(dic2)
if dic1==dic2:
    print("yes")
else:
    print("no")

 字典里面哪怕元素数量都对应

但是顺序不一样,就不是同一个引用,也就不是同一个字典!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JSU_曾是此间年少

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

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

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

打赏作者

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

抵扣说明:

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

余额充值