使用加锁文件的读写方式,编程实现投票功能。运行程序后,显示当前各个项目的投票数目,在初始状态下,各个项目的票数为0。用户投票后,更新各个项目的投票数目。
时间: 2023-11-22 13:55:10 浏览: 21
下面是一个简单的使用加锁文件的读写方式实现投票功能的 Python 代码:
```python
import fcntl
# 定义投票项目的数量和初始票数为0
num_projects = 3
votes = [0] * num_projects
# 定义投票记录文件的文件名和文件锁对象
filename = 'votes.txt'
lock = open(filename + '.lock', 'w')
# 读取投票记录文件中的票数
with open(filename, 'r') as f:
fcntl.flock(lock, fcntl.LOCK_EX) # 加锁
for i in range(num_projects):
votes[i] = int(f.readline().strip()) # 读取每个项目的票数
fcntl.flock(lock, fcntl.LOCK_UN) # 解锁
# 显示当前各个项目的投票数目
print('当前投票情况:')
for i in range(num_projects):
print(f'项目{i + 1}: {votes[i]}票')
# 用户投票
while True:
try:
project = int(input('请输入要投票的项目编号(1-3),输入0退出:'))
if project == 0:
break
if project < 1 or project > num_projects:
print('输入错误,请重新输入')
continue
votes[project - 1] += 1 # 更新对应项目的票数
with open(filename, 'w') as f:
fcntl.flock(lock, fcntl.LOCK_EX) # 加锁
for i in range(num_projects):
f.write(str(votes[i]) + '\n') # 写入每个项目的票数
fcntl.flock(lock, fcntl.LOCK_UN) # 解锁
print(f'您已成功为项目{project}投票,当前投票情况:')
for i in range(num_projects):
print(f'项目{i + 1}: {votes[i]}票')
except ValueError:
print('输入错误,请重新输入')
```
在上面的代码中,我们首先定义了投票项目的数量和初始票数为0,然后定义了投票记录文件的文件名和文件锁对象。接着,我们使用加锁文件的读写方式读取投票记录文件中的票数,并显示当前各个项目的投票数目。之后,我们进入用户投票的循环中,用户输入要投票的项目编号,并更新对应项目的票数,并使用加锁文件的读写方式将更新后的投票记录写入到投票记录文件中,最后显示当前各个项目的投票数目。用户输入0时退出循环,程序结束。