您的位置:首页 > 博客中心 > 编程语言 >

CUITpython练习

时间:2022-03-28 23:48

CUIT 软件工程学院2019级Python习题练习2

判断题

1-1 open("test.txt", ‘r+‘)是以只读模式打开test.txt文件。(F)
1-2 使用Python内置的open函数打开某个文件的时候,如果该文件不存在,则可能产生异常。所以一定要使用try except对其进行处理。(F)
1-3 在定义函数时,某个参数名字前面带有两个符号表示可变长度参数,可以接收任意多个关键参数并将其存放于一个字典之中(T)
1-4 在编写函数时,建议首先对形参进行类型检查和数值范围检查之后再编写功能代码,或者使用异常处理结构,尽量避免代码抛出异常而导致程序崩溃。(T)
1-5 只有Python扩展库才需要导入以后才能使用其中的对象,Python标准库不需要导入即可使用其中的所有对象和方法。(F)
1-6 对文件进行读写操作之后必须显式关闭文件以确保所有内容都得到保存。(T)
1-7 二进制文件不能使用记事本程序打开。(F)
1-8 使用random模块的函数randint(1, 100)获取随机数时,有可能会得到100。(T)
1-9 Python中类内部定义的私有属性绝对不能为类外部访问(T)
1-10 对于如下代码,Test类的name为对象属性,id与age为类属性。(F)
class Test:
    name = "default"
    def __init__(self, id, age):
        self.id = id
        self.age = age

单选题

2-1 已知x=[1,3,5]、y=[2,4,6],则x+y的结果是__C___。

A.[2, 4, 6, 1, 3, 5] B.[1, 2, 3, 4, 5, 6]
C.[1, 3, 5, 2, 4, 6] D.[6, 5, 4, 3, 2, 1]

2-2
语句x = 3==3, 5执行结束后,变量x的值为____C___。
A.(3, 5)    B.3
C.(True, 5) D.5

2-3
下列选项中,能求出x和y中最小值,并赋值给min的是__A___。
A.min = x if x < y else y B.min = x < y ? x : y
C.if x < y: min=x         D.if (x<y): x, y = y, x

2-4
对于字典dic={1:2, ‘3‘: ‘d‘, ‘d‘:2, 4:{1:2, 2:3} }, len(dic)的值是(B)
A.3     B.4 
C.5     D.6

2-5
print(type({})) 的输出结果是(A)
A.<class ‘dict‘>    B.<class ‘list‘>
C.<class ‘set‘>     D.<class ‘str‘>

2-6
已知d是个空字典,执行下列语句后,会产生错误的是(B)
A.d.get(1,2)        B.print(d[1])
C.d[1]=2            D.1 in d

2-7
已知d={1 : 2, ‘3‘ : 4},下列修改字典的方式中,错误的是(D)
A.d.update({3:1})   B.d[3]=1
C.d[‘3‘]=1          D.d.get(‘3‘)=1

2-8
已知列表x=list(range(1,6)),下列选项中可以取出最后一个元素的操作有__C_____
A.x[5]       B.x[6]
C.x[4]       D.x[len(x)]

2-9
已知 aList = [1,2,3,4,5,6,7],下列说法中错误的是B
A.aList[:100]的值与a[:]的值相等      B.aList[100]的值为[]
C.aList[:-100]的值为[]              D.aList[3:-3]的值是[4]

2-10
下列表达式的值是True的有(C)
A.[3] in [1,2,3]        B.3 in [123]
C.‘3‘ in list(‘123‘)    D.3 in list(‘123‘)

2-11
下列选项中与s[ : -1 ]的值相同的是(D)
A.s[-1]         B.s[:]
C.s[:len(s)]    D.s[0:len(s)-1]

2-12
下列哪个操作无法对字符串使用(A)
A.分片      B.合并
C.索引      D.赋值

2-13
下列哪个关于字符串的描述是正确的(D)
A.字符串a的最后一个字母是a[ : -1]       B.字符串中同一个字母大小写没有区别
C.Python3中字符串的默认字符编码是utf-8  D.两个字符串不可以比较大小

2-14
表达式: "4"+5的结果是(C)
A.9         B."9"
C.“45”      D.出错

2-15
已知s="abcdefg",下面哪个说法是错误的(B)
A.s[::2]的值为‘aceg‘        B.s[:-1:2]的值为‘‘
C.s[:1:]的值为‘a‘           D.s[-1:0:-1]的值为‘gfedcb‘

填空题

4-1 
Python内置函数open 用____打开文件表示读模式。‘r‘
4-2
对文件进行写入操作之后,_____方法用来在不关闭文件对象的情况下将缓冲区内容写入文件。flush()
4-3
已知函数定义 def func(x):return x%2==1, 那么表达式 filter(func,[10,8,9,4,3,1])的值为____。[9, 3, 1]
4-4
已知 x = 3,那么执行语句 x *= 6 之后,x的值为___18
4-5
已知s1="Windows10",s2="Python3.7",则执行result=‘‘.join(filter(lambda x:x.isdigit(), s1+s2))之后,result的值为_1037
4-6
if-else
 选择结构仅提供一种可选执行路径。
4-7
_比较_运算符可用来确定两个值之间是否存在特定关系。
4-8
Python提供了一种特殊的选择结构,称为__嵌套if-else___
语句,这使得嵌套选择结构的逻辑更易于编写。
4-9
_reverse()_方法用于反转列表中元素的顺序。
4-10
_Matplotlib_软件包是一个库,Python中使用该库可用来创建二维图表和图形

程序填空题


5-1
函数repeat(ls)判定列表ls中是否包含重复元素,如果包含返回True,否则返回False。每一个列表中只要有一个元素出现两次,那么该列表即被判定为包含重复元素。

然后使用该函数对n行字符串进行处理。最后统计包含重复元素的行数与不包含重复元素的行数。

输入格式:
输入n,代表接下来要输入n行字符串。 然后输入n行字符串,字符串之间的元素以空格间隔。

输出格式:
True=包含重复元素的行数, False=不包含重复元素的行数。

其中逗号后面有空格。

输入样例:
5
1 2 3 4 5
1 3 2 5 4
1 2 3 6 1
1 2 3 2 1
1 1 1 1 1
输出样例:
True=3, False=2

def repeat(ls):
    s = set(ls)
    if len(ls) == len(s): # ________
        return False
    else:
        return True

n = int(input())
countT = countF = 0
for i in range(n):
    if repeat(input().split()):# ________
        countT += 1
    else:
        countF += 1
print("True=%d, False=%d" % (countT, countF))# ________



5-3
本题用递归函数实现对列表中元素的折半查找。显示出每一步查找中,查找元素存在列表中的左边或右边列表中。列表切片时列表的下标必须有起始位置数。

def twosplit(sourceDate, findData):
    sp = int(len(sourceDate) / 2) # int()
    if sourceDate[sp] == findData:# if ___ == findData:
        print("find data:", sourceDate[sp])# print("find data:", ________)
    elif findData in sourceDate[:sp]:# elif findData in _______:
        print("data in left", sourceDate[:sp])# print("data in left", ______)
        twosplit(sourceDate[:sp], findData)# twosplit(______, ____________)
    elif findData in sourceDate[sp:]:# elif findData in ________:
        print("data in right", sourceDate[sp:])# print("data in right", ______)
        twosplit(sourceDate[sp:], findData)# twosplit(__________, findData)
    else:
        print("can‘t find data", findData)# _______


data = [1, 2, 3, 4, 5, 6, 7, 8, 17, 26, 15, 14, 13, 12, 11, ]
find = int(input())
twosplit(data, find)


5-4
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

from math import sqrt

x = 0
while True:
    a = x + 100
    b = x + 268
    a = sqrt(a)
    b = sqrt(b)
    if int(a) * int(a) == x + 100 and int(b) * int(b) == x + 268:# if __:
        print(x)
        break
x += 1

函数题

6-1 人民币美元双向兑换 (6分)
本题要求实现一个人民币与美元的双向兑换函数change(money),可实现1美元=6.709人民币的双向兑换。输出兑换的结果保留2位小数。

函数接口定义:
在这里描述函数接口。例如:
change( money )
其中 money都是用户传入的参数,表示待兑换的钱数。

裁判测试程序样例:
/* 请在这里填写答案 */

x = input()

change(x)

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

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

1美元 = 6.71人民币
输入样例2:
在这里给出一组输入。例如:

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

1人民币 = 0.15美元
code :

def change(x):
    k = float(x[1::])
    a = list(x)
    if a[0] == ‘$‘:
        print(‘{0}美元 = {1:.2f}人民币‘.format(int(k),6.709*k))
    elif a[0] == ‘¥‘:
        print(‘{0}人民币 = {1:.2f}美元‘.format(int(k),k/6.709))


6-2 可变参数传递 (6分)
本题要求实现一个函数,可输出姓名、出生日期、性别、国籍和电话,并根据出生日期算出岁数(需要判断是否足岁)。函数可以对输入中的错误信息进行捕获。

函数接口定义:
def student(name,*birth,**information)
name参数是姓名,birth参数是出生年、月、日,information参数是性别、国籍和电话。

裁判测试程序样例:
name = input()
birth = input()
student(name,birth,sex=‘Female‘, nation=‘China‘, phone=‘123456789‘)
输入样例0:
在这里给出一组输入。例如:

zhangsan
1999 2 3
输出样例0:
在这里给出一组输出。例如:

name:zhangsan
birth:1999-2-3
age is 20
sex:Female
nation:China
phone:123456789
输入样例1:
在这里给出一组输入。例如:

zhangsan
1999-2-3
输出样例1:
在这里给出一组输出。例如:

name:zhangsan
The interval in the input ‘birth‘ is a space

code :
from datetime import date


def student(name, *birth, **information):
    string = birth[0]				# 将出生日期转化为字符串
    if ‘ ‘ not in string:			# 这里仅判断出生日期不以空格为间隔的情况
        print(‘name:{}‘.format(name))
        print("The interval in the input ‘birth‘ is a space")
    else:
        ls = string.split()			# 将字符串转化为列表
        year = ls[0]				# 切片储存
        month = ls[1]
        day = ls[2]
        today = date.today()        # 获取今天的日期
        age = today.year - int(year) - ((today.month, today.day) < (int(month), int(day)))
        print(‘name:{}‘.format(name))
        print(‘birth:{}-{}-{}‘.format(year, month, day))
        print(‘age is‘, age-1)
        for k, v in information.items():
            print(‘{}:{}‘.format(k, v))

6-3 Largest Factor (3分)
Write a function that takes an integer n that is greater than 1 and returns the largest integer that is smaller than n and evenly divides n

def largest_factor(n):
    """Return the largest factor of n that is smaller than n.

    >>> largest_factor(15) # factors are 1, 3, 5
    5
    >>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
    40
    >>> largest_factor(13) # factor is 1 since 13 is prime
    1
    """
    "*** YOUR code HERE ***"
Hint: To check if b evenly divides a, you can use the expression a % b == 0, which can be read as, "the remainder of dividing a by b is 0."

code :
def largest_factor(n):
    for i in range(1, n):
        if n % i == 0:
            ans = i
    return ans

编程题

7-1 冠军魔术 (10分)

2018年FISM(世界魔术大会)近景总冠军简纶廷的表演中有一个情节:以桌面上一根带子为界,当他将纸牌从带子的一边推到另一边时,纸牌会变成硬币;把硬币推回另一边会变成纸牌。

这里我们假设纸牌会变成等量的硬币,而硬币变成纸牌时,纸牌的数量会加倍。那么给定纸牌的初始数量,当他来回推了 N 次(来/回各算一次)后,手里拿的是纸牌还是硬币?数量是多少?

输入格式:
输入在一行里给出两个正整数,分别是纸牌的初始数量和魔术师推送的次数。这里假设初始状态下魔术师手里全是纸牌。

输出格式:
如果最后魔术师手里是纸牌,输出 0 和纸牌数量;如果是硬币,则输出 1 和硬币数量。数字间须有 1 个空格。题目保证结果数值不超出整型范围(即 2^31?1)。

输入样例 1:
3 7
输出样例 1:
1 24
输入样例 2:
8 4
输出样例 2:
0 32

code :

a,b = input().split(" ")
b = int(b)
a = int(a)
for i in range(1,b+1):
    if i % 2 == 0:
        a*=2
if b % 2 ==0 : 
    print("0 ",end="") 
    print(a)
if b % 2 !=0 : 
    print("1 ",end="") 
    print(a)

7-2 冰岛家谱 (10分)
冰岛是作为一个人口稀少的国家,人群之间具有复杂的血缘关系,为了避免不必要的意外,他们的手机上都安装了一款可以随时查询两个人之间是否有血缘关系的软件。现在你的任务就是实现这样一个功能,接收血缘关系的登记信息,并在我们查询时给出两个人是否具有血缘关系。

血缘关系具有自反性、传递性。

输入格式:
一行整数n,以下n行,每行3个正整数q、a、b

若q为1,则登记a与b具有血缘关系

若q为2,则查询a与b的血缘关系,若有,输出一行YES;若无,输出一行NO。

输出格式:
对于每个q=2,输出一行YES或NO。

输入样例:
5
1 1 2
1 3 4
2 1 3
1 2 3
2 1 4
输出样例:
NO
YES
数据范围:
对于20%的数据,n<=1000
对于100%的数据,n<=10^?7?? ,1<=a,b<=n
code :
N = 100005
p = [0] * N


def find(x):
    if  (p[x] != x):
        p[x] = find(p[x])
    return p[x]

m = int(input())


for i in range(1, 100005):
    p[i] = i

while m:
    row = input().split()
    if row[0] == ‘1‘:
        p[find(int(row[1]))] = find(int(row[2]))
    else:
        if (find(int(row[1])) == find(int(row[2]))):
            print(‘YES‘)
        else:
            print(‘NO‘)
    m -= 1

本类排行

今日推荐

热门手游