PY题目列表
-
-
- 7-1 大于身高的平均值 (10 分)
- 7-2 查验身份证 (15 分)
- 7-3 输出字母在字符串中位置索引 (20 分)
- 7-4 查找指定字符 (15 分)
- 7-5 字符转换 (15 分)
- 7-6 求整数序列中出现次数最多的数 (15 分)
- 7-7 求最大值及其下标 (20 分)
- 7-8 字符串逆序 (15 分)
- 7-9 字符串转换成十进制整数 (15 分)
- 7-10 统计大写辅音字母 (15 分)
- 7-11 字符串排序 (20 分)
- 7-12 求整数的位数及各位数字之和 (15 分)
- 7-13 字符串替换 (15 分)
- 7-14 字符串字母大小写转换 (15 分)
- 7-15 统计一行文本的单词个数 (15 分)
- 7-16 删除重复字符 (20 分)
- 7-17 删除字符 (30 分)
- 7-18 输出10个不重复的英文字母 (30 分)
- 7-19 找最长的字符串 (15 分)
- 7-20 逆序的三位数 (10 分)
- 7-21 判断回文字符串 (15 分)
- 7-22 输出大写英文字母 (15 分)
-
7-1 大于身高的平均值 (10 分)
中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。
输入格式:
在一行输入中一个班的身高值,以空格分隔。
输出格式:
在一行输出超过输入的平均数的输入值,以空格分隔。
输入样例:
在这里给出一组输入。例如:
143 174 119 127 117 164 110 128
输出样例:
在这里给出相应的输出。例如:
143 174 164
思路:
首先计算平均值我们可以通过列表的sum/len来实现
之后再进行遍历输出大于平均值的就可以了
注意:因为是再同一行输出,所以输出格式要注意后面加一个end = ‘’
代码区:
heighs = input().split()
heightsInt = []
for i in heighs:
heightsInt.append(int(i))
average = sum(heightsInt) / len(heightsInt)
for i in heightsInt:
if i > average:
print("{} ".format(i), end = '')
7-2 查验身份证 (15 分)
一个合法的身份证号码由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
思路:
首先我们先写一个用来判断的函数judge,至于如何实现判断,对于前17位我们只需要使用isdigit来进行判断就欧克了,而对于第18位,我们把它相应的映射都存入列表中,然后将对应的两者相乘,最后再加起来的结果与校验列表中的值进行比较,如果一致就说明是正确的.
注意,sum需要对11取余
代码区:
def judge(num):
sum = 0
quanzhong = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
jiaoyan = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
if(not num[:-2].isdigit()):
return False
for i in range(len(num) - 1):
sum += quanzhong[i] * int(num[i])
sum = sum % 11
if(jiaoyan[sum] == num[-1]):
return True
else:
return False
n = int(input())
num = ''
flag = True
for _ in range(n):
num = input()
if not judge(num):
flag = False
print(num)
if flag and n != 0:
print("All passed")
7-3 输出字母在字符串中位置索引 (20 分)
输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。
输入格式:
第一行输入字符串
第二行输入两个字符,用空格分开。
输出格式:
从右向左输出字符和索引,即下标最大的字符最先输出。每行一个。
输入样例:
在这里给出一组输入。例如:
pmispsissippi
s p
输出样例:
在这里给出相应的输出。例如:
11 p
10 p
8 s
7 s
5 s
4 p
3 s
0 p
思路:
因为要从下标最大处开始,所以我们range函数需要倒着,详见代码
然后进行遍历就可以了
代码区:
str = input()
a, b = input().split()
for i in range(len(str) - 1, -1, -1):
if str[i] == a:
print("{} {}".format(i, a))
if str[i] == b:
print("{} {}".format(i, b))
7-4 查找指定字符 (15 分)
本题要求编写程序,从给定字符串中查找某指定的字符。
输入格式:
输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。
输出格式:
如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。
输入样例1:
m
programming
输出样例1:
index = 7
输入样例2:
a
1234
输出样例2:
Not Found
思路:
很简单,通过for循环就可以找到对应的下标,最后进行判断输出就行了
代码区:
find = input()
str = input()
index = -1
for i in range(len(str)):
if str[i] == find:
index = i
if index == -1:
print("Not Found")
else:
print("index = {}".format(index))
7-5 字符转换 (15 分)
本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。
输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例:
free82jeep5
输出样例:
825
思路:
通过isdigit来进行判断是否为数字,然后把符合的加入到列表中
使用join来把列表值转化为字符串
然后使用int将字符串转化为整型输出
代码区:
str = input()
res = []
for i in str:
if i.isdigit():
res.append(i)
res = "".join(res)
print(int(res))
7-6 求整数序列中出现次数最多的数 (15 分)
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
思路:
[0 for i in range(length)]来创建一个列表用来存放不同下标出现的次数
由于数字范围太大了,所以直接使用类似桶来做不太好,所以这里采用下标计数来进行判断最大值
通过两个for循环进行求不同下标出现的次数
再通过for循环记录下最大的数以及该下标
注意:第一个数字为长度,所以后面的要酌情加一,要不然会出现下标错误问题
代码区:
nums = [int(num) for num in input().split()]
length = nums[0]
max = [0 for i in range(length)]
for index in range(length):
for jndex in range(length):
if(nums[jndex + 1] == nums[index + 1]):
max[index] += 1
maxNum = max[0]
index = 0
for num in range(length):
if(max[num] > maxNum):
maxNum = max[num]
index = num
print(nums[index + 1], maxNum)
7-7 求最大值及其下标 (20 分)
7-7 求最大值及其下标 (20 分)
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
思路:
很简单,首先默认最大值和下标为第一个元素,然后通过for循环进行比较,找出最大的数
因为条件是大于,所以只会显示最前面出现的元素,符合条件
代码区:
n = int(input())
nums = [int(num) for num in input().split()]
maxNum = nums[0]
maxIndex = 0
for i in range(n):
if(nums[i] > maxNum):
maxNum = nums[i]
maxIndex = i
print(maxNum, maxIndex)
7-8 字符串逆序 (15 分)
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
输入样例:
Hello World!
输出样例:
!dlroW olleH
思路:
可以说最简单了,直接[::-1]来进行反转即可
代码区:
str1 = input()
print(str1[::-1])
7-9 字符串转换成十进制整数 (15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
±P-xf4±1!#
输出样例:
-3905
思路:
使用列表推导式来去除非符合的字符,判断条件为是不是数字或者不在abcdefABCDEF中
使用find方法来找到-出现的位置,与第一个符合条件的元素位置进行比较,如果先于就在输出时加一个负号
注意:当没有符合的元素时需要输出0
代码区:
strInput = input()
nums = [num for num in strInput if num in "abcdefABCDEF" or num.isdigit()]
if(len(nums) > 0):
if(strInput.find('-') < strInput.find(nums[0])):
print('-{:d}'.format(int(''.join(nums), 16)))
else:
print(int(''.join(nums), 16))
else:
print(0)
7-10 统计大写辅音字母 (15 分)
英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出字符串中大写辅音字母的个数。
输入样例:
HELLO World!
输出样例:
4
思路:
判断条件为不在AEIOU中以及是大写
大写用isupper判断
代码区:
str = input()
cnt = 0
for char in str:
if(char not in "AEIOU" and char.isupper()):
cnt += 1
print(cnt)
7-11 字符串排序 (20 分)
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted:
black
blue
red
white
yellow
思路:
使用sort进行排序,然后输出
代码区:
str = input().split()
str.sort()
print("After sorted:")
for word in str:
print(word)
7-12 求整数的位数及各位数字之和 (15 分)
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过10
9
的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321
输出样例:
3 6
思路:
使用len来求长度,for循环进行累加
代码区:
num = input()
length = len(num)
sumnum = 0
for i in range(len(num)):
sumnum += int(num[i])
print(length, sumnum)
7-13 字符串替换 (15 分)
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出替换完成后的字符串。
输入样例:
Only the 11 CAPItaL LeTtERS are replaced.
输出样例:
Lnly the 11 XZKRtaO OeGtVIH are replaced.
思路;
看到这个就想到了映射,这里用列表来实现
如果该字母在我们的mapstr中,就找出它所在的下标,然后把-index-1的mapstr中的值也就是转化后的值加到字符串中,最后输出字符串就行了
代码区:
str = input()
mapstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
strNew = ""
for n in range(len(str)):
if(str[n] in mapstr):
index = mapstr.index(str[n])
strNew += mapstr[-index - 1]
else:
strNew += str[n]
print(strNew)
7-14 字符串字母大小写转换 (15 分)
本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
输入格式:
输入为一个以“#”结束的字符串(不超过30个字符)。
输出格式:
在一行中输出大小写转换后的结果字符串。
输入样例:
Hello World! 123#
输出样例:
hELLO wORLD! 123
思路:
我这里使用了一个很长的列表表达式
有if else else,如果是大写的就变小写,小写的变大写,然后都不是就输出原来的
至于大小写转化使用了chr和ord函数
最后因为#是不用输出的,所以需要[0:-1]
代码区:
str = input()
str2 = []
str2 = [chr(ord(n) + 32) if n.isupper() else chr(ord(n) - 32) if n.islower() else n for n in str]
print(''.join(str2)[0:-1])
7-15 统计一行文本的单词个数 (15 分)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let’s go to room 209.
输出样例:
5
思路:
简单!!
你懂吧
不用我多说了
代码区:
str = input().split()
print(len(str))
7-16 删除重复字符 (20 分)
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
思路:
如果不在str2列表中的话就把该元素放入str2中
然后进行sort排序
使用join方法来转化为字符串输出
代码区:
str1 = input()
str2 = []
for n in str1:
if n not in str2:
str2.append(n)
str2.sort()
print(''.join(str2))
7-17 删除字符 (30 分)
输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。提示:去掉两端的空格。
输入格式:
在第一行中输入一行字符
在第二行输入待删除的字符
输出格式:
在一行中输出删除后的字符串
输入样例1:
在这里给出一组输入。例如:
Bee
E
输出样例1:
在这里给出相应的输出。例如:
result: B
输入样例2:
在这里给出一组输入。例如:
7!jdk*!ASyu
!
输出样例2:
在这里给出相应的输出。例如:
result: 7jdk*ASyu
思路:
首先使用strip来去除空格
然后使用chr和ord进行大小写转化存储为n和m
将大小写的n和m使用replace在原来字符串中变为空
代码区:
str = input().strip()
n = input().strip()
m = ''
if n.isupper():
m = chr(ord(n) + 32)
else:
m = chr(ord(n) - 32)
str = str.replace(n, '')
str = str.replace(m, '')
print("result:", str)
7-18 输出10个不重复的英文字母 (30 分)
随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。
如没有10个英文字母,显示信息“not found”
输入格式:
在一行中输入字符串
输出格式:
在一行中输出最左边的10个不重复的英文字母或显示信息“not found"
输入样例1:
在这里给出一组输入。例如:
poemp134567
输出样例1:
在这里给出相应的输出。例如:
not found
输入样例2
在这里给出一组输入。例如:
This 156is a test example
输出样例2:
在这里给出相应的输出。例如:
Thisaexmpl
思路:
因为是无视大小写的,所以判断条件中需要考虑大写和小写
如果是字母就加入到str2列表中,判断方法为使用isalpha方法
使用join方法将列表转化为字符串
最后输出十个列表中的数,不要输出全部的,题目有要求
(一开始没看到,查了好久…)
代码区:
str = input()
str2 = []
for n in str:
if(n.upper() not in str2 and n.lower() not in str2 and n.isalpha()):
str2.append(n)
if(len(str2) < 10):
print("not found")
else:
print(''.join(str2)[:10])
7-19 找最长的字符串 (15 分)
本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最长的字符串:
The longest is: 最长的字符串
如果字符串的长度相同,则输出先输入的字符串。
输入样例:
5
li
wang
zhang
jin
xiang
输出样例:
The longest is: zhang
思路:
将输入的单词装入列表中,然后记录下最长的单词以及下标
最后输出列表中最长的单词就ok
代码区:
n = int(input())
words = []
maxlen = 0
index = 0
for i in range(n):
words.append(input())
if len(words[i]) > maxlen:
maxlen = len(words[i])
index = i
print("The longest is:", words[index])
7-20 逆序的三位数 (10 分)
7-20 逆序的三位数 (10 分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
思路:
使用[::-1]来反转字符串
通过while循环来记录下前面的0到哪里位置的下标
只输出i之后的数
代码区:
str = input()
str2 = str[::-1]
i = 0
while(str2[i] == '0'):
i += 1
print(str2[i:])
7-21 判断回文字符串 (15 分)
输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No。
输入样例1:
level
输出样例1:
level
Yes
输入样例2:
1 + 2 = 2 + 1 =
输出样例2:
1 + 2 = 2 + 1 =
No
思路:
py里因为可以使用-的下标,所以简单了不少,for循环进行判断不对就将flag变0
代码区:
str = input()
flag = 1
for i in range(len(str)):
if(str[i] != str[-1 -i]):
flag = 0
print(str)
if(flag):
print("Yes")
else:
print("No")
7-22 输出大写英文字母 (15 分)
本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。
输入格式:
输入为一个以回车结束的字符串(少于80个字符)。
输出格式:
按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。
输入样例1:
FONTNAME and FILENAME
输出样例1:
FONTAMEIL
输入样例2:
fontname and filrname
输出样例2:
Not Found
思路:
如果是大写以及不在列表str2中就加入到列表str2中
如果str2为空就输出没找到
要不然输出使用join转化成的字符串str2
代码区:
str = input()
str2 = []
for i in str:
if i.isupper() and i not in str2:
str2.append(i)
if(len(str2) == 0):
print("Not Found")
else:
print(''.join(str2))
新手上路,解答可能不是最优解,见谅。有错请指正;