技巧福利详情

2023《Python程序设计》试题库:编程题(含答案)


2023《Python程序设计》试题库:编程题(含答案)

四、编程题

1、编写程序,在D盘根目录下创建一个文本文献test.txt,并向其中写入字符串hello world。

答:

fp = open(r’D:\test.txt’, ‘a+’)
print(‘hello world’, file=fp)
fp.close()

2、写出下面代码的优化版本,提高运营效率。

x = list(range(500))
for item in x:
    t = 5**5
print(item+t)

答:

x = list(range(500))
t = 5**5
for item in x:
    print(item+t)

3、编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提醒:使用切片。)

答:

import random
x = [random.randint(0,100) for i in range(20)]
print(x)
y = x[::2]
y.sort(reverse=True)
x[::2] = y
print(x)

4、写出下面代码的执行结果。

def Join(List, sep=None):
    return (sep or ',').join(List)
print(Join(['a', 'b', 'c']))
print(Join(['a', 'b', 'c'],':'))

答:

a,b,c

a:b:c

5、写出下面代码的运营结果。

def Sum(a, b=3, c=5):
    return sum([a, b, c])
print(Sum(a=8, c=2))
print(Sum(8))
print(Sum(8,2))

答:

13

16

15

6、写出下面代码的运营结果。

def Sum(*p):
    return sum(p)
print(Sum(3, 5, 8))
print(Sum(8))
print(Sum(8, 2, 10))

答:

16

8

20

7、编写函数,判断一个数字是否为素数,是则返回字符串YES,否则返回字符串NO。

答:

import math
def IsPrime(v):
    n = int(math.sqrt(v)+1)
    for i in range(2,n):
        if v%i==0:
            return 'No'
    else:
        return 'Yes'

8、编写函数,模拟Python内置函数sorted()。

答:

def Sorted(v):
    t = v[::]
    r = []
    while t:
        tt = min(t)
        r.append(tt)
        t.remove(tt)
    return r

9、编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。

答:

import random
x = [random.randint(0,100) for i in range(20)]
print(x)
y = x[0:10]
y.sort()
x[0:10] = y
y = x[10:20]
y.sort(reverse=True)
x[10:20] = y
print(x)

10、编写程序,运营后用户输入4位整数作为年份,判断其是否为闰年。假如年份能被400整除,则为闰年;假如年份能被4整除但不能被100整除也为闰年。

答:

x = input('Please input an integer of 4 digits meaning the year:')
x = eval(x)
if x%400==0 or (x%4==0 and not x%100==0):
    print('Yes')
else:
    print('No')

11、编写程序,实现分段函数计算,如下表所示。

x

y

x<0

0

0<=x<5

x

5<=x<10

3x-5

10<=x<20

0.5x-2

20<=x

0

答:

x = input('Please input x:')
x = eval(x)
if x<0 or x>=20:
    print(0)
elif 0<=x<5:
    print(x)
elif 5<=x<10:
    print(3*x-5)
elif 10<=x<20:
print(0.5*x-2)

12、阅读下面的程序,判断其是否可以正常运营,假如可以运营则写出执行结果,假如不能运营则写出理由。

class Test:
    def __init__(self, value):
        self.__value = value
    @property
    def value(self):
        return self.__value
t = Test(3)
t.value = 5
print(t.value)

答:

不能运营。程序中定义的是只读属性,不能修改属性的值。

13、下面代码的功能是,随机生成50个介于[1,20]之间的整数,然后记录每个整数出现频率。请把缺少的代码补全。

import random
x = [random.____________(1,20) for i in range(_______)]
r = dict()
for i in x:
    r[i] = r.get(i, _____)+1
for k, v in r.items():
print(k, v)

答:

分别填写randint、50、0

14、假设有Python程序文献demo.py,代码如下:

def main():
    if __name__ == '__main__':
        print(1)
    else:
        print(2)
main()

将该程序文献直接运营时输出结果为_________,作为模块导入时得到结果___________-。(1、2)

15、下面程序的执行结果是__________________。(1)

s = 0
for i in range(1,101):
    s += i
else:
    print(1)

16、下面程序的执行结果是______________。(1275)

s = 0
for i in range(1,101):
    s += i
    if i == 50:
        print(s)
        break
else:
    print(1)

17、下面的程序是否可以正常执行,若不能,请解释因素;若能,请分析其执行结果。

from random import randint
result = set()
while True:
    result.add(randint(1,10))
    if len(result)==20:
        break
print(result)

答:无法对的执行,由于该程序的功能是从[1,10]区间中选择20个不同的随机整数,而该区间并没有这么多整数,所以程序死循环。

18、下面的代码是否可以对的运营,若不能请解释因素;若能,请分析其执行结果。

>>> x = list(range(20))
>>> for i in range(len(x)):

del x[i]

答:无法对的执行,由于删除列表元素时会影响其他元素在列表中的索引,上面的代码会抛出下标越界的异常。

19、阅读下面的代码,解释其功能。

>>> x = list(range(20))
>>> for index, value in enumerate(x):
if value == 3:
x[index] = 5

答:将列表x中值为3的元素修改为5。

20、阅读下面的代码,解释其功能。

>>> x = [range(3*i, 3*i+5) for i in range(2)]
>>> x = list(map(list, x))
>>> x = list(map(list, zip(*x)))

答:一方面生成一个包含列表的列表,然后模拟矩阵转置。

21、阅读下面的代码,解释其功能。

>>> import string
>>> x = string.ascii_letters + string.digits
>>> import random
>>> print(''.join(random.sample(x, 10)))

答:输出由英文字母大小写或数字组成的长度为10且不反复的随机字符串。

22、阅读下面的代码,分析其执行结果。

def demo(*p):
    return sum(p)
print(demo(1,2,3,4,5))
print(demo(1,2,3))

答:输出结果为

15

6

23、阅读下面的代码,分析其执行结果。

def demo(a, b, c=3, d=100):
    return sum((a,b,c,d))
print(demo(1, 2, 3, 4))
print(demo(1, 2, d=3))

答:输出结果为

10

9

24、下面的代码输出结果为_____________。(3)

def demo():
    x = 5
x = 3
demo()
print(x)

25、下面函数的功能为_______________。(将序列循环左移k位,得到新序列并返回)

def demo(lst, k):
if k<len(lst):
return lst[k:]+lst[:k]

26、编写函数,求任意整数的二进制形式中最后连续0的个数。

def demo(n):
b_n = bin(n)
index = b_n.rfind('1') + 1
return len(b_n[index:])

27、有n个乒乓球运动员打淘汰赛,编写函数计算至少需要多少场比赛才干决出冠军,不允许直接使用n-1。

def demo(n):
    if n == 1:
        return 0
    if n == 2:
        return 1
    m, c = divmod(n, 2)
    return m + demo(c+m)

28、使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?

(1)循环

>>> for x in range(21):
for y in range(34):
z = 100-x-y
if z%3==0 and 5*x + 3*y + z//3 == 100:
print(x,y,z)

0 25 75

4 18 78

8 11 81

12 4 84

(2)列表推导式

>>> [(x, y, 100-x-y) for x in range(21) for y in range(34) if (100-x-y)%3==0 and 5*x+3*y+(100-x-y)//3==100]

[(0, 25, 75), (4, 18, 78), (8, 11, 81), (12, 4, 84)]

29、编写函数,给定任意字符串,找出其中只出现一次的字符,假如有多个这样的字符,就所有找出。

def searchOne(s):
    # 创建空字典
    d = dict()
    # 遍历字符串,并分别记录每个字符的出现次数
    for ch in s:
        # 这里重点演示字典的get()方法
        # 假如这个字符出现过,加1
        # 假如这个字符第一次出现,0+1
        d[ch] = d.get(ch, 0) + 1
    # 列表推导式,查找所有只出现一次的字符
    chs = [ch for ch, n in d.items() if n==1]
    # 返回最终结果,所有只出现一次的字符
    return chs
print(searchOne('abcdddca'))

30、阅读以下冒泡法排序代码,尝试写出优化代码,提高代码运营效率。

from random import randint
def bubbleSort(lst):
    length = len(lst)
    for i in range(0, length):
        for j in range(0, length-i-1):
            #比较相邻两个元素大小,并根据需要进行互换
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
lst = [randint(1, 100) for i in range(20)]
print('Before sort:\n', lst)
bubbleSort(lst)
print('After sort:\n', lst)

参考答案:

from random import randint
def bubbleSort(lst):
    length = len(lst)
    for i in range(0, length):
        flag = True
        for j in range(0, length-i-1):
            #比较相邻两个元素大小,并根据需要进行互换
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
                flag = False
        if flag:
            break
lst = [randint(1, 100) for i in range(20)]
print('Before sort:\n', lst)
bubbleSort(lst)
print('After sort:\n', lst)

31、编写程序,用户输入带有千分位逗号的数字字符串,然后输出不带千分位逗号的数字字符串。假如输入字符串'0'则退出程序。

参考答案:

def convert(strNumber):
    return ''.join(strNumber.split(','))
while True:
    x = input('输入带有千分位逗号的数字:')
    if x == '0':
        print('bye')
        break
    print(convert(x))

32、编写程序,用户输入不带千分位逗号的数字字符串,然后输出带千分位逗号的数字字符串。

参考答案:

def convert(strNumber):
    # 考虑小数的情况
    temp = strNumber.split('.', 1)
    # 整数部分
    first = temp[0]
    if not first.isdigit():
        return '不是有效数字'
    # 小数部分
    try:
        second = temp[1]
        if not second.isdigit():
            return '不是有效数字'
    except:
        second = ''
    # 增长千分位逗号
    def nested(s):
        result = []
        length = len(s)
        index = length % 3
        if index != 0:
            result.append(s[:index])
        for i in range(index, length, 3):
            result.append(s[i:i+3])
        return ','.join(result)
    first = nested(first)
    # 小数部分和整数部分的千分位不同样
    if second:
        second = ''.join(reversed(second))
        second = nested(second)
        second = ''.join(reversed(second))
        # 删除两侧也许的0和千分位逗号
        return '.'.join([first, second]).strip(',0')
    # 删除整数左侧也许的0和逗号
    return first.lstrip('0,')
# 测试
while True:
    x = input('输入不带千分位逗号的数字:')
    if x == '0':
        print('bye')
        break
    print(convert(x))