PTA-浙大版《Python 程序设计》AC解答汇总-第三章

# 第3章-1 3-1.大于身高的平均值 (10分) 
def demo_3_1():
    h=list(map(int,input().split()))
    ave=sum(h)/len(h)
    for x in h:
        if x > ave:
            print(x,end=" ")


# 第3章-2 查验身份证 (15分)
def demo_3_2():
    n=int(input())
    W=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    M="10X98765432"
    res=[]
    for i in range(n):
        s=input()
        sum,flag=0,0
        for j in range(17):
            if s[j].isdigit():
                sum=sum+int(s[j])*W[j]
            else:
                flag=1
                break
        if(M[sum%11]!=s[17]) or flag==1:
            res.append(s)
    if len(res):
        for x in res:print(x)
    else:
        print("All passed")

                                
# 第3章-3 输出字母在字符串中位置索引 (20分)
def demo_3_3():
    str=input()
    s,p=input().split()
    for i in range(len(str)-1,0,-1):
        if str[i]==s or str[i]==p:
            print("%d %c"%(i,str[i]))
  
                                
# 第3章-4 查找指定字符 (15分)
def demo_3_4():
    s=input()
    str=input()
    if str.rfind(s)!=-1:
        print("index = %d"%(str.rfind(s)))
    else:
        print("Not Found")

                                
# 第3章-5 字符转换 (15分)
def demo_3_5():
    str=input()
    res=""
    for x in str:
        if x.isdigit():
            res=res+x
    print(int(res))


# 第3章-6 求整数序列中出现次数最多的数 (15分)
def demo_3_6():
    nums=list(map(int,input().split()))
    num,cnt=0,0
    for x in nums[1:nums[0]+1]:
        if nums.count(x)>cnt:
            num=x
            cnt=nums.count(x)
    print(num,cnt)


# 第3章-7 求最大值及其下标 (20分)
def demo_3_7():
    N=int(input())
    nums=list(map(int,input().split()))
    max=max(nums[0:N+1])
    for i in range(N):
        if nums[i]==max:
            print(max,i)
            break
                    
                               
# 第3章-8 字符串逆序 (15分)
def demo_3_8():
    str=input()
    print(str[::-1])


# 第3章-9 字符串转换成十进制整数 (15分)
def demo_3_9():
    nums="0123456789abcdefABCDEF-"
    str=input()
    num=""
    for x in str:
        if x in nums:
            num=num+x
        elif x==" ":
            break
    if num=="" or num=="-":
        print(0)
    elif num[0]=="-":
        print(-int(num.replace("-",""),16))
    else:
        print(int(num.replace("-",""),16))


# 第3章-10 统计大写辅音字母 (15分)
def demo_3_10():
    C="BCDFGHJKLMNPQRSTVWXYZ"
    str=input()
    cnt=0
    for x in str:
        if x in C:
            cnt=cnt+1
    print(cnt)


# 第3章-11 字符串排序 (20分)
def demo_3_11():
    strings=input().split(" ")
    strings.sort()
    print("After sorted:")
    for x in strings:
        print(x)


# 第3章-12 求整数的位数及各位数字之和 (15分)
def demo_3_12():
    num=input()
    print(len(num),sum(int(x) for x in num))


# 第3章-13 字符串替换 (15分)
def demo_3_13():
    s=input()
    for x in s:
        if x>="A" and x<="Z":
            print(chr(ord("A")+ord("Z")-ord(x)),end="")
        else:
            print(x,end="")

                                  
# 第3章-14 字符串字母大小写转换 (15分)
def demo_3_14():
    s = input()
    for x in s:
        if x==" ":
            break
        elif x.islower():
            print(x.upper(),end="")
        elif x.isupper():
            print(x.lower(),end="")
        else:
            print(x,end="")


# 第3章-15 统计一行文本的单词个数 (15分)
def demo_3_15():
    s=input().split(" ")
    print(len([x for x in s if x !=""]))


# 第3章-16 删除重复字符 (20分)
def demo_3_16():
    str=list(set(input()))
    print("".join(sorted(str)))

                                
# 第3章-17 删除字符 (30分)
def demo_3_17():
    s1,s2 = input().strip(),input().strip()
    print("result:",s1.replace(s2.upper(), '').replace(s2.lower(), ''))


# 第3章-18 输出10个不重复的英文字母 (30分)
def demo_3_18():
    str=input()
    res=""
    for x in str:
        if x not in res and x.isalpha() and x.upper() not in res.upper():
            res=res+x
        if len(res)>=10:
            break
    if len(res)<10:
        print("not found")
    else:
        print(res)


# 第3章-19 找最长的字符串 (15分)
def demo_3_19():
    n=int(input())
    longest=""
    for i in range(n):
        str=input()
        if len(str)>len(longest):
            longest=str
    print("The longest is:",longest)


# 第3章-20 逆序的三位数 (10分)
def demo_3_20():
    print(int(input()[::-1]))


# 第3章-21 判断回文字符串 (15分)
def demo_3_21():
    str=input()
    print(str)
    if str==str[::-1]:
        print("Yes")
    else:
        print("No")


# 第3章-22 输出大写英文字母 (15分)
def demo_3_22():
    str=input()
    res=""
    for x in str:
        if x.isupper() and x not in res:
            res=res+x 
    if len(res)>0:
        print(res)
    else:
        print("Not Found") 


题目链接: https://pintia.cn/problem-sets/14/problems/779 一、题目大意 本题要求编写一个函数is_prime(n),判断n是否为素数。若n是素数,则返回True;否则返回False。 二、算法思路 素数指只能被1和自身整除的大于1的正整数。 判断一个数n是否为素数,可以先遍历2到n-1之间的所有数i,若n能被某个i整除,则n不是素数。 但是这种方法的时间复杂度显然过高,不适用于大数判断。 另外一个更高效的算法是“质数筛选法”,即埃拉托斯特尼筛法(Sieve of Eratosthenes)。 该方法的基本思想是从2开始,将每个质数的倍数都标记成合数。一个数如果不是任何数的倍数,则它一定是素数。 步骤如下: 1.先把2作为素数,把2的倍数全部标记为合数。 2.找到下一个未标记的数3,把它作为素数,把3的倍数全部标记为合数。 3.找到下一个未标记的数5,把它作为素数,把5的倍数全部标记为合数。 4.重复步骤2、3直到需要判断的数N的平方根m,若该数为素数,则它没有被除过,即它保留的是初始的值2。 三、代码实现 def is_prime(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True 本题中只需要实现is_prime函数即可。 is_prime函数首先判断n是否小于2,若是,则不是素数,直接返回False。然后遍历2到n平方根之间的所有数i,若n能被i整除,则n不是素数,返回False。若遍历完所有数都没有返回,则n是素数,返回True。 四、总结 本题考察了素数的判断算法,既可以使用暴力枚举的方式,也可以使用高效的质数筛选法。实现过程中需要注意程序的效率和算法的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值