python程序设计——练习5

1.简单计算2

请你统计从1~1000000之间(包括二者)7的倍数的个数。
代码:

ans = 0
for i in range(1,1000001):
    if i % 7 == 0:
        ans += 1
print(ans)

2.数列求和 - part one

【题目描述】
现有数列:
在这里插入图片描述
现在请输入一个正整数N,计算S的值。
【输入描述】
一个正整数N。
【输出描述】
一个整数。
【输入样例1】

3

【输出样例1】

24

代码:

n = int(input())
t = 1
ans = 0
for i in range(1, n + 1):
    ans +=  i ** i * t
    t *= -1
print(ans)

3.列表的基本操作

【题目描述】
输入一串用空格隔开的数字字符,请依次将他们放入列表中保存,并去除列表中的重复项,最后将列表中的元素按数值大小从小到大进行排序,输出排好序后下标为i的字符。
【注意】测试样例中保证排完序的列表中至少有i+1个元素。
【输入描述】
第一行:一串以空格隔开的数字字符串。
第二行:待输出列表的下标值i。
【输出描述】
排好序的列表中下标为i的元素。
【输入样例1】

9 7 17 6 7 5 8
4

【输出样例1】

9

代码:

a = list(map(int, input().split()))
n = int(input())
a = list(set(a))
a.sort()
print(a[n])

4.字符串的重新排列

【题目描述】
从键盘输入两个长度相同的字符串 sLis 和 整数列表 iLis ,请重新排列字符串 sLis ,排列规则为:将字符串 sLis的第 i 个字符,按照列表 iLis[i] 的值所指示的位置放置。
返回重新排列后的字符串。
【输入描述】
共两行,第一行是字符串 sLis;第二行时整数列表 iLis中的元素(列表元素用逗号隔开)。
【输出描述】
共一行,重新排列后的字符串。
【输入样例1】

e vlPooynht
3,4,2,0,5,1,9,6,10,8,7

【输出样例1】

love Python

代码:

a = list(input())
ans = a[:]
b = list(map(int, input().split(',')))
for i in range(len(b)):
    ans[b[i]] = a[i]
print(''.join(ans))

5.身份证提取信息

【题目描述】
从键盘获取1个18位的身份证号18位身份证号前17位必须是数字,第18位可以是数字或是大写字母,不足18位或组成不正确的身份证号,输出"输入错误!";输入正确,则输出此人的出生日期、性别、以及今年多少岁(占3位有效位)。
提示:第1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7-14位数字表示:出生年(不能超过2023)、月(应为有效月份数)、日(应为有效日期数);第15~17位数字为顺序码,表示同一区域内同年同月同日出生的顺序号,其中第17位数字表示性别,奇数表示男性,偶数表示女性;第18位数字是校检码。
【输入描述】
一个身份证号。
【输出描述】
输入正确时,输出:此人出生日期是1902年02月28日,性别是男,今年120岁;输入错误时:输入错误!
注意:标点符号为中文输入法,无空格
【输入样例1】

37050219020228003X

【输出样例1】

此人出生日期是1902年02月28日,性别是男,今年121岁

【输入样例2】

123243

【输出样例2】

输入错误!

代码:

m = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def find(x):
    if x % 4 ==0 and x % 100 !=0 or x % 400 ==0:
        return True
    else:
        return False
def check(s):
    if len(s) < 18:
        return False
    for i in range(0,17):
        if s[i] >= '0' and s[i] <= '9':
            continue
        else:
            return False
    if not(s[-1] >= '0' and s[-1] <='9' or s[-1] >='A' and s[-1] <= 'Z'):
        return False
    if int(s[6:10]) > 2023:
        return False
    if int(s[10:12]) < 1 or int(s[10:12]) > 12:
        return False
    if int(s[10:12]) != 2 and m[int(s[10:12])] < int(s[12:14]) or int(s[12:14]) < 1:
        return False
    if find(int(s[6:10])) and m[2] + 1 < int(s[12:14]) or not find(int(s[6:10])) and m[2] < int(s[12:14]):
        return False
    return True
s = input()
if not check(s):
    print('输入错误!')
else:
    a = '男' if int(s[-2]) %2 else '女'
    print(f'此人出生日期是{s[6:10]}{s[10:12]}{s[12:14]}日,性别是{a},今年{2023-int(s[6:10]):3}岁')

6.有序列表的重复项删除

【题目描述】
给你一个列表sList,请你删除重复出现的元素,使每个元素只出现一次,返回删除后列表的新长度。元素的相对顺序应该保持一致。
【输入描述】
一行整数,数字之间用逗号隔开。
【输出描述】
一个整数,为新列表的长度。
【输入样例1】

1,11,1,2,2,3,3,4,4,5

【输出样例1】

6

代码:

s = list(map(int, input().split(',')))
print(len(list(set(s))))

7.亲和数

【题目描述】
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。
人们对这样的数感到很惊奇,并称之为亲和数。
一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数。
【输入描述】
两个整数A,B; 其中 0 <=A,B <=600000 ;
【输出描述】
如果A和B是亲和数的话输出YES,否则输出NO。
【输入样例1】

220 284

【输出样例1】

YES

【输入样例2】

100 200

【输出样例2】

NO

代码:

a, b = map(int, input().split())
def get(x):
    res = 0
    for i in range(1,x):
        if x % i == 0:
            res += i
    return res
if get(a) == b and get(b) == a:
    print('YES')
else:
    print('NO')

8.查验身份证

【题目描述】
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
【输入描述】
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
【输出描述】
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
【输入样例1】

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

【输出样例1】

12010X198901011234
110108196711301866
37070419881216001X

【输入样例2】

2
320124198808240056
110108196711301862

【输出样例2】

All passed

代码:

n = int(input())
m = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
z = '10X98765432'
flag = True
while(n):
    n -= 1
    s = input()
    x = list(''.join(s[:]))
    res = 0
    for i in range(0,17):
        if x[i] != 'X':
            res += m[i] * int(x[i])
    if x[-1] != z[res % 11]:
        print(s)
        flag = False
if flag:
    print('All passed')

9.最常见的单词

【题目描述】
给定一个字符串 (S) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,但答案不唯一。
禁用列表中的单词用小写字母表示,不含标点符号(标点符号包括【!】【,】【.】【:】【;】【‘】【?】)。段落中的单词不区分大小写。答案都是小写字母。
【提示】注意S.split()和S.split(’ ')的使用区别,简单来说:split()切割时会将多个空格当成一个空格;split(’ ')的时候,多个空格也要分割,因此会分割出来空。
【输入描述】
输入两行,一个字符串和一个禁用单词列表。
【输出描述】
一行,最常用单词列表。
【输入样例1】

Bob hit a ball, the hit BALL flew far after it was hit.
[‘hit’]

【输出样例1】

[‘ball’]

【输入样例2】

A big black bug bit a big black bear and made the big black bear bleed blood.
[‘a’,‘and’]

【输出样例2】

[‘big’, ‘black’]

代码:

s = list(input().lower().replace('!', ' ').replace(',', ' ').replace('.', ' ').replace(':', ' ').replace(';', ' ').replace("'", ' ').replace('?', ' ').split())
l = eval(input())
maxx = 0
for i in range(len(s)):
 if s[i] not in l:
  maxx = max(maxx, s.count(s[i]))
ans = []
for i in range(len(s)):
 if s[i] not in l and s.count(s[i]) == maxx and ans.count(s[i]) == 0:
  ans.append(s[i])
print(ans)

10.字符子串下标匹配

【题目描述】
从键盘输入两个字符串 Parent和 child,请你在字符串Parent中找出字符串child的第一个匹配项的下标(下标从 0 开始)。如果字符串child不是字符串Parent的一部分,则返回 -1 。
【注意】不区分大小写。
【输入描述】
两行字符串。
【输出描述】
一个整数。
【输入样例1】

sadbutsad
Sad

【输出样例1】

0

【输入样例2】

ilovepython
then

【输出样例2】

-1

代码:

a = input().lower()
b = input().lower()
print(a.find(b))

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值