Python学习---课后练习整理(一)

2023-01-09 11:25:56

python课后练习

本学习的课程Python程序设计的练习在拼题A上完成,为了记录学习过程,对课后练习进行整理
python课后练习整理(二)

Python练习01

判断题

判断题

  1. 在Python 3.x中可以使用中文作为变量名
    答案:True
    原因:Python3中,源文件默认使用UTF-8编码
  2. Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。
    答案:False
    原因:在当前作用域内,可以对Python变量重新赋值,根据赋值不同,其类型也会发生改变
    示例:
    示例图片01
  3. Python运算符%不仅可以用来求余数,还可以用来格式化字符串
    答案:True
    示例:
    示例图片02
  4. 在Python 3.x中,使用内置函数input()接收用户输入时,不论用户输入的什么格式,一律按字符串进行返回。
    答案:True
    示例:
    示例图片03
  5. 在Python中,变量不直接存储值,而是存储值的引用,也就是值在内存中的地址。
    答案:True
    示例:
    在这里插入图片描述

编程题

  1. jmu-python-输入输出-计算字符串中的数
将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。

输入格式:
一行字符串,字符串中的数之间用1个空格或者多个空格分隔。

输出格式:
第1行:输出数的个数。
第2行:求和的结果,保留3位小数。

输入样例:

    2.1234    2.1     3    4 5 6

输出样例:

    6
    22.223

解答:

s = input()
num = s.split()
Sum = 0
for i in num:
    Sum += float(i)
print(len(num))
print("%0.3f" % Sum)
  1. 输入列表,求列表元素和(eval输入应用)
在一行中输入列表,输出列表元素的和。

输入格式:
一行中输入列表。

输出格式:
在一行中输出列表元素的和。

输入样例:

    [3,8,-5]

输入样例:

    6

解答:
不使用eval()函数的时候,我是这么写的

a=input().lstrip('[').rstrip(']')  # 先将输入的字符串去掉两端括号
list=[] # 新建列表,用来存放数字
for i in a.split(','):  # 再将字符串使用','切片
    list.append(int(i)) # 将字符列表里的字符型数字强制转换为数字型,并添加到list里
sum=0
for num in list: # 对列表list进行求和
    sum+=num
print(sum)

当我使用eval()函数

list=eval(input()) # eval()函数直接将字符串类型的列表转化为列表类型
sun = 0
for num in list: # 列表求和
    sum+=num
print(sum)
  1. 你好
你的程序会读入一个名字,比如John,然后输出“Hello John”。

输入格式:
一行文字。

输出格式:
一行文字。

输入样例:

    Mary Johnson

输出样例:

    Hello Mary Johnson

解答:

# 直接进行字符串连接输出就可以了

a=input()
print("Hello",a) # print()函数在输出多个参数时,默认使用空格间隔

# 以下是运行结果
    Mike
    Hello Mike
  1. List item
程序会读入两行,每行都是一个数字,输出这两个数字的和

输入格式:
两行文字,每行都是一个数字

输出格式:
一行数字

输入样例:

    18
    21

输出样例:

    39

解答:

# 由于规定了输入格式为数字,所以只需进求和输出即可
a = eval(input())
b = eval(input())
print(a+b)

笔记

input()函数
获取用户输入,返回值为字符串
如果需要在输入前打印提示信息,可以在括号里添加字符串
如: python input("请输入")
split()函数
格式:split(str,num)
功能:通过指定分隔符对字符串进行切片
参数说明:str表示分割使用的字符,num表示分割次数,默认为全部分割
eval()函数
格式: eval(s)
功能:将字符串格式的对象具现化

Python练习02

判断题

在这里插入图片描述

  1. 已知st=“Hello World!”,使用print(st[0:-1])语句可以输出字符串变量st中的所有内容。(False)
    示例:
    在这里插入图片描述

  2. Python程序设计中的整数类型没有取值范围限制,但受限于当前计算机的内存大小。 True

  3. 已知: x=1 y=2 z=[2,3,4] 则语句 x not in z 计算结果是True。 True
    in 和 not in 在python里称为成员运算符,表示一个值是否属于某一序列,返回值为True或False

  4. 已知 x = 3,那么执行语句 x+=6 之后,x的内存地址不变。 False
    python使用引用型数据,所以进行运算后,数字型的x的地址会发生改变
    在这里插入图片描述

单选题

在这里插入图片描述

  1. 表达式1+2*3.14>0的结果类型是: (2分)
    int
    long
    float
    bool

1+2*3.14显然大于0,所以结果是Ture,为bool型

  1. 八进制35的十进制值是_。 (2分)
    30
    25
    19
    29

十进制转其他进制使用除n取余法,其他进制转十进制则相反,3*81+5*80

  1. Python语言正确的标识符是_。 (2分)
    2you
    my-name
    _item
    abc*234

Python规定,标识符的命名必须只能采用字母数字下划线,且不能以数字开头

  1. _号表示同一行的后面部分是Python程序的注释。 (2分)
    *
    %
    /
    #

Python里使用#进行行注释

  1. Python 语句 print(0xA + 0xB)的输出结果是__。 (2分)
    0xA + 0xB
    A + B
    0xA0xB
    21

'0x’前缀表示十六进制,0xA 0xB分别表示10和11

  1. Python 语句’car’; y = 2; print (x+y)的输出结果是__。 (2分)
    语法错
    2
    'car2’
    'carcar’

1,car两端的引号使用的是中文的单引号,非法
2,Python里不以分号表示语句结束
3,无法直接进行字符串和数字相加,如果要进行连接的话,应进行类型转换

编程题

  1. 产生每位数字相同的n位数
读入2个正整数A和B,1<=A<=9, 1<=B<=10,产生数字AA...A,一共B个A

输入格式:
在一行中输入A和B。

输出格式:
在一行中输出整数AA...A,一共B个A

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

      1,  5

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

    11111

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

  3  ,4

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

    3333

解答:

a,b= eval(input())
print(str(a)*b)
  1. 转换函数使用
输入一个整数和进制,转换成十进制输出

输入格式:
在一行输入整数和进制

输出格式:
在一行十进制输出结果

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

    45,8

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

    37

解答:

a,b=eval(input())
print(int(str(a),b)) # int(str,num)将num进制的数str转换为十进制
  1. jmu-python-统计字符个数
输入一个字符串,统计其中数字字符及小写字符的个数

输入格式:
输入一行字符串

输出格式:
共有?个数字,?个小写字符,?填入对应数量

输入样例:

    helo134ss12

输出样例:

    共有5个数字,6个小写字符

解答:

lowerletters=0
numbers=0
strs=input()
for c in strs:
  if(c.islower()):
    lowerletters+=1
  if(c.isdigit()):
    numbers+=1
print('共有%d个数字,%d个小写字符' % (numbers,lowerletters))

笔记

  1. Python进制函数,常见的有
    bin()# 二进制,二进制数字格式为0b**
    oct()# 八进制,八进制数字格式为0o**
    hex()# 十六进制,十六进制数字格式为0x**
  2. 字符串的乘法
    python里直接用字符串乘以一个数n,表示n个相同字符串拼接而成的字符串
  3. 判断字符,小写,数字

isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节)
False: 汉字数字,罗马数字,小数
Error: 无

isdecimal()
True: Unicode数字,,全角数字(双字节)
False: 罗马数字,汉字数字,小数
Error: byte数字(单字节)

isnumeric()
True: Unicode 数字,全角数字(双字节),汉字数字
False: 小数,罗马数字
Error: byte数字(单字节)


num = "1"  #unicode
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = "1" # 全角
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = b"1" # byte
num.isdigit()   # True
num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'

num = "IV" # 罗马数字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # False

num = "四" # 汉字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # True

以上内容来源于菜鸟教程1

python练习03

判断题

在这里插入图片描述

如a是一个列表,且a[:]与a[::-1]相等,则a中元素按顺序排列构成一个回文。

True a[:]表示正序切片,a[::-1]表示逆序切片,两者相等则a中元素按顺序构成回文

表达式 {1, 3, 2} > {1, 2, 3} 的值为True。

False 两集合元素相同,所以{1,2,3}=={1,3,2},原表达式的值为False

已知x为非空列表,那么执行语句x[0] = 3之后,列表对象x的内存地址不变。

True 修改列表某个元素不会更改整个列表的地址

Python内置的集合set中元素顺序是按元素的哈希值进行存储的,并不是按先后顺序。

True 集合元素是无序的,按hash存储

已知x是一个列表,那么x = x[3:] + x[:3]可以实现把列表x中的所有元素循环左移3位。

True x[3:]表示列表x从第4个元素到最后一个元素,x[:3]表示列表x从开始到第三个元素,两者进行拼接,效果是将列表x中所有元素循环左移3位

编程题

  1. 图的字典表示。
图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:
{'O':{'A':2,'B':5,'C':4}}

输入格式:
第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串

输出格式:
在一行中输出顶点数,边数,边的总长度

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

    4
    {'a':{'b':10,'c':6}}
    {'b':{'c':2,'d':7}}
    {'c':{'d':10}}
    {'d':{}} 

输相应的输出。例如:

    4 5 35

解答:

pointnum = int(input()) # 输入点的数量
edgesum = 0 # 声明周长 
edgenum = 0 # 声明边数for i in range(pointnum):
  dictlist=eval(input()) # 获取表示一个顶点和该顶点相连的边及长度的字典  
  for j in dictlist:
    dict=dictlist[j] # 获取边长字典
    for k in dict:
      edgenum += 1  # 边数计数
      edgesum += dict[k] #  边长求和
    break
print(pointnum,edgenum,edgesum)
  1. jmu-python-逆序输出
输入一行字符串,然后对其进行如下处理。

输入格式:
字符串中的元素以空格或者多个空格分隔。

输出格式:
逆序输出字符串中的所有元素。
然后输出原列表。
然后逆序输出原列表每个元素,中间以1个空格分隔。注意:最后一个元素后面不能有空格。

输入样例:

    a b  c e   f  gh

输出样例:

    ghfecba
    ['a', 'b', 'c', 'e', 'f', 'gh']
    gh f e c b a

解答:

str=input()
list=[]
for c in str.split():  #字符串切片
  list.append(c)	# 生成新的字符列表
print("".join(list[::-1]))	# 将列表元素无间隔逆序输出
print(list)					# 输出列表
print(" ".join(list[::-1]))	# 将列表元素以空格为间隔逆序输出
  1. jmu-python-班级人员信息统计
输入a,b班的名单,并进行如下统计。

输入格式:
第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符。
第2行::b班名单,一串字符串,每个学生名称以1个或多个空格分隔,可能有重复学生。
第3行::参加acm竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。
第4行:参加英语竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。
第5行:转学的人(只有1个人)。

输出格式
特别注意:输出人员名单的时候需调用sorted函数,如集合为x,则print(sorted(x))
输出两个班级的所有人员数量
输出两个班级中既没有参加ACM,也没有参加English的名单和数量
输出所有参加竞赛的人员的名单和数量
输出既参加了ACM,又参加了英语竞赛的所有人员及数量
输出参加了ACM,未参加英语竞赛的所有人员名单
输出参加英语竞赛,未参加ACM的所有人员名单
输出参加只参加ACM或只参加英语竞赛的人员名单
最后一行:一个同学要转学,首先需要判断该学生在哪个班级,然后更新该班级名单,并输出。如果没有在任何一班级,什么也不做。

输入样例:

    abcdefghijab
    1   2 3 4 5 6 7 8 9  10
    1 2 3 a b c
    1 5 10 a d e f
    a

输出样例:

    Total: 20
    Not in race: ['4', '6', '7', '8', '9', 'g', 'h', 'i', 'j'], num: 9
    All racers: ['1', '10', '2', '3', '5', 'a', 'b', 'c', 'd', 'e', 'f'], num: 11
    ACM + English: ['1', 'a'], num: 2
    Only ACM: ['2', '3', 'b', 'c']
    Only English: ['10', '5', 'd', 'e', 'f']
    ACM Or English: ['10', '2', '3', '5', 'b', 'c', 'd', 'e', 'f']
    ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

解答:

a = input()
# a="abcdefghijab"
seta = set(a)	# 由题意可知,要进行集合运算,则用集合表示每个群体
# print(seta)
b = input()
# b="1   2 3 4 5 6 7 8 9  10"
setb = set(b.split()) # 通过切片操作消除空格
# print(setb)
acm = input()
# acm = "1 2 3 a b c"
setacm = set(acm.split())
# print(setacm)
english = input()
# english = "1 5 10 a d e f"
setenglish = set(english.split())
# print(setenglish)
zhuanxue = input()
# zhuanxue = "a"
# setzhuanxue = set(zhuanxue) # 转学生作为独立集合
# print(setzhuanxue)
Total = seta.union(setb) # 两班所有学生---并集
race = setacm.union(setenglish) #竞赛学生---并集
Notinrace = Total.difference(race) #非竞赛学生---差集
ACMplusEnglish = setacm.intersection(setenglish) # 报名两项竞赛学生---交集
OnlyACM = setacm.difference(setenglish) # 仅报ACM学生---差集
OnlyEnglish = setenglish.difference(setacm) # 仅报英语竞赛学生---差集
ACMOrEnglish = setacm.symmetric_difference(setenglish) # 报名一项竞赛---对称差集
print("Total:",len(seta.union(setb)))

print("Not in race:",sorted(Notinrace),end=", ")
print("num:",len(Notinrace))

print("All racers:",sorted(race),end=", ")
print("num:",len(race))

print("ACM + English:",sorted(ACMplusEnglish),end=", ")
print("num:",len(ACMplusEnglish))

print("Only ACM:",sorted(OnlyACM))

print("Only English:",sorted(OnlyEnglish))

print("ACM Or English:",sorted(ACMOrEnglish))
# 将转学学生当成集合,进行差集运算,考虑到只有一个转学生,故使用第二种方法
# if zhuanxue in seta:
#     seta.difference_update(setzhuanxue)
#     print(sorted(seta))
# elif zhuanxue in setb:
#     setb.difference_update(setzhuanxue)
#     print(sorted(setb))
# 将转学学生当成集合元素,进行元素移除运算
if zhuanxue in seta:
    seta.remove(zhuanxue)
    print(sorted(seta))
elif zhuanxue in setb:
    setb.remove(zhuanxue)
    print(sorted(setb))

笔记

  1. join()函数
    --语法:str.join(sequence)
    --功能:将序列中的元素以指定的字符连接生成一个新的字符串
    --参数说明
    ----str表示连接所用的字符,sequence表示需要连接的序列
  2. 集合函数
seta.union(setb,setc....)		# 并集
seta.difference(setb)			# 差集
seta.intersection(setb,setc....)# 交集
seta.symmetric_difference()		# 对称差集
seta.remove(item)				# 移除指定元素

Python练习04

这次的判断题没什么难度,所以不进行整理

编程题

  1. jmu-python-汇率兑换
按照1美元=6人民币的汇率编写一个美元和人民币的双向兑换程序

输入格式:
输入人民币或美元的金额,人民币格式如:R100,美元格式如:$100

输出格式:
输出经过汇率计算的美元或人民币的金额,格式与输入一样,币种在前,金额在后,结果保留两位小数

输入样例1:
R60
输出样例1:
$10.00
输入样例2:
$5
输出样例2:
R30.00

解答:

money = input()
if money.startswith('R',0,1):
    numofchange = int(money.lstrip('R'))/6
    print('$',"%.2f" % numofchange,sep='')
elif money.startswith('$',0,1):
    numofchange = int(money.lstrip('$'))*6
    print('R',"%.2f" % numofchange,sep='')
  1. jmu-python-成绩转换
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。

输入样例:
98
输出样例:
A

解答:

score100 = int(input())
if score100>=90:
  print('A')  
elif 80<=score100<90:
  print('B')
elif 70<=score100<80:
  print('C')
elif 60<=score100<70:
  print('D')
else:
  print('E')

笔记

  1. 汇率转换主要包含的问题有
    –识别输入字符串的开头字符-----------使用str.startswith(str,beg,end)函数,返回值为bool类型
    –从字符串中提取数字并进行运算-----先去除开头字符str.lstrip(str),然后字符串转数字
    –输出的数字要带两位小数--------------”%.2f"%num,或者format(num,’.2f’)
  2. 成绩转换主要涉及多重分支的选择结构
    由于python里没有switch语句
    所以只有不断的if … elif …else

  1. 来源:http://www.runoob.com/python3/python3-string-isnumeric.html ↩︎

  • 作者:终上层楼
  • 原文链接:https://blog.csdn.net/weixin_41004763/article/details/89040566
    更新时间:2023-01-09 11:25:56