Python题集:2019春Python程序设计选修课习题笔记

时间:2021-08-09 08:17:55

一、判断题:

  1-1、在Python 3.x中可以使用中文作为变量名。

  答案:√

  1-2、Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。

  答案:×

  1-3、Python运算符%不仅可以用来求余数,还可以用来格式化字符串。

  答案:√

  1-4、在Python 3.x中,使用内置函数input()接收用户输入时,不论用户输入的什么格式,一律按字符串进行返回。

  答案:√

  1-5、在Python中,变量不直接存储值,而是存储值的引用,也就是值在内存中的地址。

  答案:√

  2-1、已知st="Hello World!",使用print(st[0:-1])语句可以输出字符串变量st中的所有内容。

  答案:×

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

  答案:√

  2-3、已知: x=1,y=2,z=[2,3,4],则语句 x not in z 计算结果是True。

  答案:√

  2-4、已知 x = 3,那么执行语句 x+=6 之后,x的内存地址不变。

  答案:×

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

  答案:√

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

  答案:×

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

  答案:√

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

  答案:√

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

  答案:√

  4-1、如下代码可以实现当输入6的时候输出x>5,输入4的时候输出 3<x<=5,输入1的时候输出x<=3

x = int(input())
if x>5:
  print("x>5")
elif x>3:
  print("3<x<=5")
else:
  print("x<=3")

  答案:×

  4-2、当作为条件表达式时,空值、空字符串、空列表、空元组、空字典、空集合、空迭代对象以及任意形式的数字0都等价于False。

  答案:√

 


二、选择题:

  1-1、表达式1+2*3.14>0的结果类型是(D)

  A、int       B、long      C、float      D、bool

  1-2、八进制35的十进制值是(D)

  A、30       B、25         C、19        D、29

  1-3、Python语言正确的标识符是(C)

  A、2you           B、my-name         C、_item        D、abc*234

  1-4、 (D)号表示同一行的后面部分是Python程序的注释。

  A、*        B、%       C、/        D、#

  1-5、Python 语句 print(0xA + 0xB)的输出结果是(D)

  A、0xA + 0xB    B、A + B       C、0xA0xB    D、21

  1-6、Python 语句x=’car’; y = 2; print (x+y)的输出结果是(A)

  A、语法错      B、2         C、'car2’     'carcar’

 


三、编程题:

   1-1、jmu-python-输入输出-计算字符串中的数:

  将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。

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

  输出格式:

  第1行:输出数的个数。

  第2行:求和的结果,保留3位小数。

  输入样例:

2.1234    2.1     3    4 5 6

  输出样例:

6
22.223

  代码:

s = input()
a = s.split()
num = len(a)
sum = 0
for i in range(num):
  sum = sum + float(a[i])
print(num)
print("{:.3f}".format(sum))

  1-2、输入列表,求列表元素和(eval输入应用):

  在一行中输入列表,输出列表元素的和。

  输入格式:

  一行中输入列表。

  输出格式:

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

  输入样例:

[3,8,-5]

  输出样例:

6

  代码:

q = eval(input())
print(sum(q))

  1-3、你好:

  你的程序会读入一个名字,比如John,然后输出“Hello John”。

  输入格式:

  一行文字。

  输出格式:

  一行文字。

  输入样例:

Mary Johnson

  输出样例:

Hello Mary Johnson

  代码:

a=input()
print("Hello "+a)

  1-4、Py的A+B:

  程序会读入两行,每行都是一个数字,输出这两个数字的和。

  输入格式:

  两行文字,每行都是一个数字

  输出格式:

  一行数字

  输入样例:

18
21

  输出样例:

39

  代码:

num1 = input()
if num1.strip() == "":
    print("输入有误")
    exit()
elif num1[0] != '.':
    for i in num1:
        if not('0' <= i <= '9' or i == '.'):
            print("输入有误")
            exit()
    num1 = float(num1)
else:
    print("输入有误")
    exit()
num2 = input()
if num2.strip() == "":
    print("输入有误")
    exit()
elif num2[0] != '.':
    for i in num2:
        if not('0' <= i <= '9' or i == '.'):
            print("输入有误")
            exit()
    num2 = float(num2)
else:
    print("输入有误")
    exit()
su = num1 + num2
su = [str(su), int(su)][int(su) == su]
num1 = [str(num1), int(num1)][int(num1) == num1]
num2 = [str(num2), int(num2)][int(num2) == num2]
print("{}".format(su))

  2-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(("%d"%a)*b)

  2-2、转换函数使用:

  输入一个整数和进制,转换成十进制输出

  输入格式:

  在一行输入整数和进制

  输出格式:

  在一行十进制输出结果

  输入样例:

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

45,8

  输出样例:

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

37

  代码:

a,b=eval(input())
c=str(a)
print(int(c,b))

  2-3、jmu-python-统计字符个数:

  输入一个字符串,统计其中数字字符及小写字符的个数

  输入格式:

  输入一行字符串

  输出格式:

  共有?个数字,?个小写字符?填入对应数量

  输入样例:

helo134ss12

  输出样例:

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

  代码:

a=input()
b,c=0,0
for e in a:
  if e.isdigit():
    b+=1
  elif e.isalpha():
    c+=1
print("共有%d个数字,%d个小写字符"%(b,c))

  3-1、图的字典表示:

  Python题集:2019春Python程序设计选修课习题笔记

  图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。

  比如上图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

  代码:

s=int(input())
a=0
b=0
dict={}
for i in range(0,s):
    t=input()
    t=eval(t)
    dict.update(t)
for key in dict.keys():
    c=len(dict[key])
    a=a+c
    for key2 in dict[key].keys():
        d=dict[key][key2]
        b=b+d
print(str(s)+" "+str(a)+" "+str(b))

  3-2、jmu-python-逆序输出:

  输入一行字符串,然后对其进行如下处理。

  输入格式:

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

  输出格式:

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

  输入样例:

a b  c e   f  gh

  输出样例:

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

  代码:

s= str(input())
m=s.split()
o=""
for i in range(len(m)-1,-1,-1):
  o=o+m[i]
print(o)
print(m[:])
d=str(m[-1])
for i in range(len(m)-1):
  d=d+" "+m[-i-2]
print(d)

  3-3、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']

  代码:

from collections import OrderedDict
a= input()
b=input().split(" ")
c=input().split(" ")
d=input().split(" ")
e=input()
list_1="".join(OrderedDict.fromkeys(a))
st_split = list(b)
while "" in st_split:
    st_split.remove("")
list_2 = list(set(st_split))
list_2.sort(key=st_split.index)
re=len(list_1)+len(list_2)
print("Total: "+str(re))
while "" in c:
    c.remove("")
result3=list(c)+d
st_split2 = list(d)
list2=list(set(list_2+list(list_1)).difference(set(result3)))
l2 = list(set(result3))
l2.sort(key=result3.index)
list4=[]
list4=list(set(l2) & set(c))
list41=list(set(list4) & set(d))
list5=list(set(l2).difference(set(c)))
list6=list(set(l2).difference(set(d)))
list7=list(set(list5).union(set(list6)))
print('Not in race: {0}, num: {1}'.format(sorted(list2),str(len(list2))))
print('All racers: {0}, num: {1}'.format(sorted(l2),str(len(l2))))
print('ACM + English: {0}, num: {1}'.format(sorted(list41),str(len(list41))))
print('Only ACM: {0}'.format(sorted(list6)))
print('Only English: {0}'.format(sorted(list5)))
print('ACM Or English: {0}'.format(sorted(list7)))
list_4=list(list_1)
if e in list_4:
    list_4.remove(e)
    print (sorted(list_4))
if e in list_2:
    list_2.remove(e)
    print (sorted(list_2))

  4-1、jmu-python-汇率兑换:

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

  输入格式:

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

  输出格式:

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

  输入样例: 

R60

  输出样例1:

$10.00

  输入样例2:

$5

  输出样例2:

R30.00

  代码:

mydata = input()
if mydata[0] == '$':
    n = eval(mydata[1:])
    print("R{:.2f}".format(n*6))
elif mydata[0] == 'R':
    m = eval(mydata[1:])
    print("${:.2f}".format(m/6))
else:
    print("输入有误")

  4-2、jmu-python-成绩转换:

  本题要求编写程序将一个百分制成绩转换为五分制成绩。

  转换规则:

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

  输入样例:

98

  输出样例:

A

  代码:

mydata = eval(input())
if mydata >= 90:
    print("A")
elif mydata < 90 and mydata >= 80:
    print("B")
elif mydata < 80 and mydata >= 70:
    print("C")
elif mydata < 70 and mydata >= 60:
    print("D")
else:
    print("E")

 


四、函数题:

  1-1、使用函数求特殊a串数列和:

  给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和

  函数接口定义:

fn(a,n)
其中 a 和 n 都是用户传入的参数。 a 的值在[1, 9]范围;n 是[1, 9]区间内的个位数。函数须返回级数和

  裁判测试程序样例:

/* 请在这里填写答案 */ 
a,b=input().split()
s=fn(int(a),int(b))
print(s)

  输入样例:

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

2 3

  输出样例:

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

246

  代码:

def fn(a,n):
    s=0
    p=""
    for i in range(n):
        p=str(a)*(i+1)
        s=s+int(p)
    return s

  1-2、使用函数求余弦函数的近似值:

  本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps:

  cos (x) = x^0 / 0! - x^2 / 2! + x^4 / 4! - x^6 / 6! + ?

  函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

  函数接口定义:

在这里描述函数接口,例如:
funcos(eps,x )

  裁判测试程序样例:

在这里给出函数被调用进行测试的例子,例如:
/* 请在这里填写答案 */
eps=float(input())
x=float(input())
funcos(eps,x )

  输入样例:

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

0.0001 -3.1

  输出样例:

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

cos(-3.1) = -0.9991

  代码:

def jiecheng(n):
    if n == 0:
        return 1
    sum = n * jiecheng(n - 1)
    return sum
def funcos(eps,x):
    i=0
    s=0
    while x**i/jiecheng(i)>eps or x**i/jiecheng(i)==eps:
        i=i+2
    for j in range(0,i,2):
        if j%4==0:
            s=s+x**j/jiecheng(j)
        else:
            s=s-x**j/jiecheng(j)
    print('cos({0}) = {1:.4f}'.format(x,s))

 

  注:

  1、代码在运行在python3编译环境下。

  2、代码贴上来可能会出现缩进被编辑器自动修改的问题,如出现问题请自行调整代码缩进,毕竟在python里对缩进要求极严格,可能造成编译不成功。