Python编程练习题:表达式、列表操作、文件读写、字典操作、函数定义、闰年判断、多线程同步
Python编程练习题及解答
1. 表达式eval('3+5')的值是______________
答案:8
解析:eval() 函数用于执行字符串形式的 Python 表达式。在这个例子中,eval('3+5') 等价于直接执行 3+5,结果为 8。
2. 列表对象aList的值为[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切片aList[-3:-1]得到的值是_____________________
答案: [15, 17]
解析:Python 列表的切片语法为 aList[start:end:step],其中 start 为起始索引(包含),end 为结束索引(不包含),step 为步长。aList[-3:-1] 表示从倒数第三个元素开始,到倒数第一个元素之前(不包含)的元素,因此结果为 [15, 17]。
3. 只读方式打开文本文件'record.dat',正确的函数调用为_________________
答案: open('record.dat', 'r')
解析:Python 中 open() 函数用于打开文件,'r' 模式表示只读方式。
4. 已知 x = {1:2},那么执行语句 x[2] = 3之后,x的值为________________
答案: {1:2, 2:3}
解析:字典是一种可变数据类型,允许添加新的键值对。执行 x[2] = 3 后,在字典 x 中添加了新的键 2,其对应的值为 3。
5. 编写一个函数,接收一个列表作为参数,如果有元素在列表中不止一次出现,则返回True,要求不改变原来列表的值。
def repeated(ls):
for i in ls:
if ls.count(i) > 1:
return True
解析:使用列表的 count() 方法统计每个元素在列表中出现的次数,如果次数大于 1,则说明该元素不止一次出现,返回 True。
6. 函数g(n)用于判断n是否为闰年,是闰年则返回True,否则返回False。要求用户输入年份year,调用函数g(year)并依据其返回值,输出该年份的总天数。
def g(n):
if (n%4 == 0 and n%100 != 0) or (n%400 == 0):
return True
else:
return False
year=eval(input('请输入年份:'))
while year<=0:
year=eval(input('请输入年份:'))
if g(year):
print('{}年有366天'.format(year))
else:
print('{}年有365天'.format(year))
解析:闰年的判断规则为:
- 能被 4 整除但不能被 100 整除,或者
- 能被 400 整除
7. 以下程序是模拟多窗口售票,并通过Rlcok机制实现多线程同步。请把缺少的代码补全:
import threading
import time
import random
def sellTicket(window,buy):
global n
lock.acquire() # 获取锁
if n>=buy:
n = n - buy
time.sleep(1)
print(f'{window} 售出 {buy} 张票,剩余{n}张票\n')
else:
print('余票不足,购票失败\n')
lock.release() # 释放锁
n = 100
lock = threading.RLock()
print(f'现有票数{n}张')
sellThreads = []
for i in range(5):
buy = random.randint(1,10) # 随机售出的票数
t = threading.Thread(sellTicket, args = ('窗口'+str(i), buy))
sellThreads.append(t)
for t in sellThreads:
t.start() # 启动各窗口购票线程
解析:
- 在 sellTicket 函数中,使用 lock.acquire() 获取锁,确保同一时间只有一个线程可以访问共享资源 n(票数)。
- 操作完成后,使用 lock.release() 释放锁,允许其他线程访问。
- 在创建线程时,使用 t.start() 启动线程。
8. 缺少的代码为______________________
答案:lock.acquire()
解析:在 sellTicket 函数中,需要先获取锁才能访问共享资源 n(票数),确保线程同步。
9. 缺少的代码为_____________________
答案:t.start()
解析:在创建线程后,需要使用 t.start() 方法启动线程,才能让线程开始执行。
10. 缺少的代码为_____________________
答案:t.join()
解析:使用 t.join() 方法可以让主线程等待所有子线程执行完毕后再继续执行。这样可以确保所有窗口售票线程都执行完后再结束程序。
原文地址: https://www.cveoy.top/t/topic/oDuh 著作权归作者所有。请勿转载和采集!