JMU - Python 第三章

JMU - Python 第三章

1.

第3章-1 大于身高的平均值 分数 10

中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

输入格式:

在一行输入中一个班的身高值,以空格分隔。

输出格式:

在一行输出超过输入的平均数的输入值,以空格分隔。

输入样例:

在这里给出一组输入。例如:

143 174 119 127 117 164 110 128

输出样例:

在这里给出相应的输出。例如:

143 174 164 

解题思路:创建列表,求出列表的平均值,然后遍历列表的每一个元素输出超过平均值的元素

input = list(map(int, input().split()))
avg = sum(input) / len(input)       #求列表平均值
for i in input:                     #遍历列表中每一个元素
    if i > avg:
        print("{}".format(i),end = " ")

2.

第3章-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

解题思路:首先读懂题意,我们要知道有问题的号码的情况有:校验值不正确,前17位出现非数字。我们可以用列表存放权值和每一个证件号码,然后设置好计数器(每计算一个证件号码都要清零),按照题目要求计算好前17位加权和并取模后,判断取模后的结果Z对应的校验码M是否和第18位相同。针对不同情况进行不同输出即可。

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"]
N = int(input())
wry_list = []
number = [input() for i in range (N)]   #列表的高效输入
for i in range(N):
    sum = 0     #重置计数器
    for j, k in enumerate(number[i][0:-1]): #j和k分别对应下下表、列表值,且不取最后一位
        if not(k.isdigit()):    #检测字符串是否全是数字组成
            wry_list.append(number[i])
            break
        sum += int(k) * weight[j]
    if M[sum%11] != number[i][-1]:
        wry_list.append(number[i])
if(len(wry_list) == 0):
    print("All passed")
else:
    for i in number:
        if i in wry_list:
            print(i)

3.

第3章-3 输出字母在字符串中位置索引 分数 30

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

输入格式:

第一行输入字符串
第二行输入两个字符,用空格分开。

输出格式:

从右向左输出字符和索引,即下标最大的字符最先输出。每行一个。

输入样例:

在这里给出一组输入。例如:

pmispsissippi
s p

输出样例:

在这里给出相应的输出。例如:

11 p
10 p
8 s
7 s
5 s
4 p
3 s
0 p

解题思路:简单的遍历字符串,查找位置即可。注意:按照输出样例我们可以推断出,需要逆序判断

str = input()
char1, char2 = input().split()
for index, char in enumerate(reversed(str)):
    if char == char1 or char == char2:
        print("{} {}".format(len(str) - index - 1,char))

4.

第3章-4 查找指定字符 分数 15

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming

输出样例1:

index = 7	

输入样例2:

a
1234

输出样例2:

Not Found

解题思路:以此从左到右遍历,然后赋值给index的时候不断更新,最后得到的就是最大的下标。另外可以注意如何判断不存在:可以通过设置index = -1

char = input()
str = input()
list_str = list(str)
index = -1
for mark, ch in enumerate(list_str):
	if(ch == char):
		index = mark
if(index == -1):
	print("Not Found")
else:
	print("index = {}".format(index))

5.

第3章-5 字符转换 分数 15

本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。

输入格式:

输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:

在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:

free82jeep5

输出样例:

825

解题思路:遍历字符串,判断每一个字符是否是数字,如果是的花添加到列表中。最后输出列表即可。需要注意输出列表的时候存在前导0(即不可输出00825),可以加入flag进行判断

#方法一:当作字符串处理
str = input()
num_list = []	#创建空列表输出数字
flag = 0
for i in range(len(str)):
	if str[i].isdigit():
		num_list.append(str[i])
for i in range(len(num_list)):
    if(flag == 0):                  #防止出现前导0
        if(num_list[i] != '0'):
            flag = 1
    if(flag == 1):
	    print("{}".format(num_list[i]),end = "")
if flag == 0 and len(num_list)!=0:  #只输出0的情况
    print("0")
#方法二:当作整数处理
str=input()
sum=0
for i in range(len(str)):
    if str[i].isdigit():
        sum=10*sum+int(str[i])
print("{}".format(sum))

6.

第3章-6 求整数序列中出现次数最多的数 分数 15

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:

输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:

在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

输出样例:

3 4

解题思路:将整行输入作为一个列表,然后切片[1:]就是除了第一个输入的全部输入。num在list_name中的出现次数可以用list_name.count(num)函数进行计算,然后用两个计数器来分别记录最大的数和最大的出现次数。最后按照格式输出即可。

numlist = list(map(eval,input().split()))
num ,cout = numlist[1:], 0
for i in num:
    ct = num.count(i)
    if ct > cout :
        cout = ct
        out = i
print(out,cout)

7.

第3章-7 求最大值及其下标 分数 20

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

解题思路:考察对列表的操作,使用max()函数和.index()函数

n = int(input())
numlist = list(map(eval,input().split()))
print(max(numlist),numlist.index(max(numlist)))

8.

第3章-8 字符串逆序 分数 15

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:

在一行中输出逆序后的字符串。

输入样例:

Hello World!

输出样例:

!dlroW olleH

解题思路:直接通过对字符串的反转

print(input()[::-1])

9.

第3章-9 字符串转换成十进制整数 分数 15

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

+-P-xf4+-1!#

输出样例:

-3905

解题思路:首先判断正负号。根据题意可以理解,在读取到十六进制数字前如果存在"-“就为负数,最简单可以通过设置一个 flag = 0,如果遇到”-"就变为1,通过flag的状态进行判断。然后是将读取到的十六进制字符串转换为十进制数。题目中的 f41 = 16 * 16 * 15 + 16 * 4 + 1 = 3905,

st = input()
s = ""      #用于存放16进制字符串
for i in st:
    if i.isdigit() or "A"<= i <= "F" or "a" <= i <= "f":
        s += i
if len(s) == 0:
    print(0)
else:
    num = int(s, 16)
    if(st.find("-") < st.find(s[0])):   #判断是否要加"-"
        num = -num
    print(num)

10.

第3章-10 统计大写辅音字母 分数 15

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

HELLO World!

输出样例:

4

解题思路:用isupper()函数判断大写,然后满足辅音(非元音)即可

s = input()
count = 0
for i in s:
	if i.isupper() and i!='A' and i!='E' and i!='I' and i!='O' and i!='U':
		count += 1
print(count)

11.

第3章-11 字符串排序 分数 20

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue black white

输出样例:

After sorted:
black
blue
red
white
yellow

解题思路:降序排序用reverse(),升序排序用sort(),根据题意用sort()即可

stlist = input().split()
stlist.sort()   #对列表排序
print("After sorted:")
for i in stlist:
    print(i)

12.

第3章-12 求整数的位数及各位数字之和 分数 15

对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:

输入在一行中给出一个不超过109的正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

321

输出样例:

3 6

解题思路:通过len()求位数,通过sum求和

num = input()
print(len(num),sum([int(i) for i in num]))

13.

第3章-13 字符串替换 分数 15

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母对应字母
AZ
BY
CX
DW
XC
YB
ZA

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.

解题思路:直接两个列表分别存放原字母和对应字母,通过find()找到原字母的下表,然后就能获得对应字母。或者可以通过原字母和对应字母之间的关系进行转换,通过ord()获取ascii值,再通过chr函数转换为字符

str1 = input()
str2 = ""
for i in str1:
    if "A" <= i <= "Z":
        str2 += chr(ord("A") + ord("Z") - ord(i))
    else:
        str2 += i
print(str2)

14.

第3章-14 字符串字母大小写转换 分数 15

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:

在一行中输出大小写转换后的结果字符串。

输入样例:

Hello World! 123#

输出样例:

hELLO wORLD! 123

解题思路:读取除了最后的#的字符串部分,使用swapcase()函数可以实现大小写转换

print(input()[:-1].swapcase())

15.

第3章-15 统计一行文本的单词个数 分数 15

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

解题思路:输入字符串,以空格为分割进行保存,然后输出列表的长度

print(len(input().split()))

16.

第3章-16 删除重复字符 分数 20

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

解题思路:通过利用集合set()创建不重复的元素集以此来实现去掉重复字符的操作。然后通过join()函数连接即可

st = list(set(input()))
print("".join(sorted(st)))

17.

第3章-17 删除字符 分数 40

输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。提示:去掉两端的空格。

输入格式:

在第一行中输入一行字符
在第二行输入待删除的字符

输出格式:

在一行中输出删除后的字符串

输入样例1:

在这里给出一组输入。例如:

        Bee
   E

输出样例1:

在这里给出相应的输出。例如:

result: B

输入样例2:

在这里给出一组输入。例如:

  7!jdk*!ASyu
  !

输出样例2:

在这里给出相应的输出。例如:

result: 7jdk*ASyu

解题思路:用strip()函数去掉两头的空格,然后删除或者用”“替换

st = input().strip()
a=input().strip()
st = st.replace(a.lower(),"").replace(a.upper(),"")  #用”“替换可以理解为删除,或者用strip()
print("result: {}".format(st))

18.

第3章-18 输出10个不重复的英文字母 分数 50

随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。
如没有10个英文字母,显示信息“not found”

输入格式:

在一行中输入字符串

输出格式:

在一行中输出最左边的10个不重复的英文字母或显示信息“not found"

输入样例1:

在这里给出一组输入。例如:

poemp134567

输出样例1:

在这里给出相应的输出。例如:

not found

输入样例2

在这里给出一组输入。例如:

This 156is a test example

输出样例2:

在这里给出相应的输出。例如:

Thisaexmpl

解题思路:创建新的空列表,循环输入字符串的每一个元素,先判断是否为字母,如果是的话判断是否在创建的该新列表中,如果该字母的大小写字母均不在,就打入列表。最后要在过程中判断长度。

st = input()
stlist = []
for i in st:
    if len(stlist) == 10:
        break
    if i.isalpha():
        if (i  not in stlist) and (i.swapcase()  not in stlist):
            stlist.append(i)
if len(stlist) < 10:
    print("not found")
else:
    print(*stlist,sep = "")

19.

第3章-19 找最长的字符串 分数 15

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

输入格式:

输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:

在一行中用以下格式输出最长的字符串:

The longest is: 最长的字符串

如果字符串的长度相同,则输出先输入的字符串。

输入样例:

5
li
wang
zhang
jin
xiang

输出样例:

The longest is: zhang

解题思路:求出所有字符串的长度,然后回到字符串列表中去找该字符串

N = int(input())
strlist = [input() for i in range (N)]
maxlist = max([len(i) for i in strlist])
for i in strlist:
    if(len(i) == maxlist):
        print("The longest is: {}".format(i))
        break

20.

第3章-20 逆序的三位数 分数 10

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

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

解题思路:由题意可得,输入为三位整数。因此只要输出逆序字符串并且去前置0即可

print(input()[::-1].lstrip('0'))

21.

第3章-21 判断回文字符串 分数 15

输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。

输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:

输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No

输入样例1:

level

输出样例1:

level
Yes

输入样例2:

1 + 2 = 2 + 1 =

输出样例2:

1 + 2 = 2 + 1 =
No

解题思路:判断回文的简单方法就是将需要判断的字符串与其逆序字符串进行比较,如果相等则回文。

st = input()
rev_st = st[::-1]
if st == rev_st:
	print("{}\nYes".format(st))
else:
	print("{}\nNo".format(st))

22.

第3章-22 输出大写英文字母 分数 15

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

输入格式:

输入为一个以回车结束的字符串(少于80个字符)。

输出格式:

按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。

输入样例1:

FONTNAME and FILENAME

输出样例1:

FONTAMEIL

输入样例2:

fontname and filrname

输出样例2:

Not Found

解题思路:创建空列表,读取字符串中的每一个字符,先判断是否已在列表中,不在再打入列表。

st = input()
stlist = []
for i in st:
	if i.isupper() and i not in stlist:
		stlist.append(i)
if(len(stlist) == 0):
	print("Not Found")
else:
	print(*stlist,sep="")
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值