PTA-浙大版 《Python程序设计》 第3章编程题(3)WEEK6


代码思路仅供参考,欢迎大家批评指正!


1. 输出字母在字符串中位置索引

输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

在这里插入图片描述

data = input()
a,b = input().split()
data = data[::-1]
 
for i in range(len(data)):
    if data[i] == b:
        print(len(data)-i-1,b)
    elif data[i] == a:
        print(len(data)-i-1,a)

2. 字符替换

本题要求编写程序,将输入字符串中的大写英文字母按以下对应规则替换,其他字符不变。(提示:转换表用元组实现)

在这里插入图片描述

data = list(input())
for i in range(len(data)):
    if ord(data[i]) >= 65 and ord(data[i]) <= 90:
        data[i] = chr(155-ord(data[i]))
 
data = ''.join(data)
print(data)

3. 逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

在这里插入图片描述

num = input()
r_num = num[::-1]

print(r_num.lstrip('0'))

4. 判断两个字符串是否为变位词

如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy”也互为变位词。

在这里插入图片描述

a = list(input())
b = list(input())
 
index = 0
if len(a) == len(b):
    if a == b:
        index = 1
    else:
        for i in range(len(a)):
            if a[0] in b:
                b.remove(a[0])
                a.remove(a[0]) 
            else: 
                index = 1
                break
    if index == 1:
        print('no')
    else:
        print('yes')
else:
    print('no')

5. 计算有n个字符串中最长的字符串长度

编写程序,用于计算有n(1<n<10)个字符串中最长的字符串的长度。前导空格不要计算在内!

在这里插入图片描述

# Method 1
num = int(input())

length = 0
for i in range(num):
    data = input().replace(' ','')
    if len(data)>length:
        length = len(data)
        
print(f'length={length}')

# Method 2
num = int(input())
lst = [input().strip() for i in range(num)]
max_len = max([len(i) for i in lst])

print(f'length={max_len}')

6. 位1的个数

输入一个非负整数,求它变成二进制后1的个数(提示:用bin函数)。

在这里插入图片描述

num = bin(int(input()))
print(str(num).count('1'))

7. 整数的二进制相加

输入两个整数,大小在[0,63]之间。求它们的二进制和,二进制用8位表示。

在这里插入图片描述

a = int(input())
b = int(input())

print('{:08b}'.format(a))
print('{:08b}'.format(b))
print('-' * 8)
print('{:08b}'.format(a+b))

8. 汉明距离

两个整数间的汉明距离指的是这两个数对应二进制位不同的位置的数目。输入两个整数x,y, 0<=x, y<=231。输出x, y的汉明距离。

在这里插入图片描述

x,y = input().split()
x,y = '{:032b}'.format(int(x)),'{:032b}'.format(int(y))

sum = 0
for i in range(len(str(x))):
    if x[i] != y[i]:
        sum += 1
        
print(sum)

9. 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

在这里插入图片描述

num = int(input())

weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
M = ['1','0','X','9','8','7','6','5','4','3','2']
sum1 = 0
for i in range(num):
    id = input()
    try:
        int(id[:17]) 
    except:
        print(id)
        continue
    if id[-1] == M[sum(list(map(lambda e,f:e * f,list(map(int,id[:17])),weight))) % 11]:
        sum1 += 1
    else:
        print(id)
 
if sum1 == num:
    print('All passed')

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值