2023《Python程序设计》试题库:编程题(含答案)
- 技巧分类:编程网络
- 技巧标签:Python  程序  设计  试题 
- 技巧链接:https://wpfx.org/skills/5260.html
- 技巧详情:
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))
发表评论(审核通过后显示) 取消回复