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()  # 启动各窗口购票线程

解析:

  1. 在 sellTicket 函数中,使用 lock.acquire() 获取锁,确保同一时间只有一个线程可以访问共享资源 n(票数)。
  2. 操作完成后,使用 lock.release() 释放锁,允许其他线程访问。
  3. 在创建线程时,使用 t.start() 启动线程。

8. 缺少的代码为______________________

答案:lock.acquire()

解析:在 sellTicket 函数中,需要先获取锁才能访问共享资源 n(票数),确保线程同步。

9. 缺少的代码为_____________________

答案:t.start()

解析:在创建线程后,需要使用 t.start() 方法启动线程,才能让线程开始执行。

10. 缺少的代码为_____________________

答案:t.join()

解析:使用 t.join() 方法可以让主线程等待所有子线程执行完毕后再继续执行。这样可以确保所有窗口售票线程都执行完后再结束程序。

Python编程练习题:表达式、列表操作、文件读写、字典操作、函数定义、闰年判断、多线程同步

原文地址: https://www.cveoy.top/t/topic/oDuh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录