请你用python写一份有关是石头剪刀布代码,加个用户注册功能,加个文件读写,把用户的信息和猜数次数,成功失败次数都记录下来,还能给个榜单,搞个准确率排行榜
时间: 2023-12-04 21:03:03 浏览: 102
好的,下面是我为您编写的代码:
```python
import random
# 用户注册功能
def register():
with open('user_info.txt', 'a') as f:
username = input('请输入用户名:')
f.write(username + ',0,0,0\n')
# 文件读写功能
def read_user_info():
with open('user_info.txt', 'r') as f:
user_info = f.readlines()
return [info.strip().split(',') for info in user_info]
def write_user_info(user_info):
with open('user_info.txt', 'w') as f:
for info in user_info:
f.write(','.join(info) + '\n')
# 获取用户信息
def get_user_info(username, user_info):
for info in user_info:
if info[0] == username:
return info
# 猜拳游戏
def game(username):
options = ['石头', '剪刀', '布']
computer = random.choice(options)
user = input('请出拳(石头/剪刀/布):')
print('电脑出了:' + computer)
if user not in options:
print('请输入正确的选项!')
return False
elif user == computer:
print('平局!')
return False
elif (user == '石头' and computer == '剪刀') or (user == '剪刀' and computer == '布') or (user == '布' and computer == '石头'):
print('恭喜你,你赢了!')
return True
else:
print('很遗憾,你输了!')
return False
# 获取用户准确率
def get_accuracy(info):
if int(info[1]) == 0:
return 0
else:
return round(int(info[2]) / int(info[1]), 2)
# 获取所有用户准确率并排序
def get_accuracy_rank(user_info):
ranks = []
for info in user_info:
ranks.append((info[0], get_accuracy(info)))
ranks.sort(key=lambda x: -x[1])
return ranks
# 主程序
while True:
print('欢迎来到猜拳游戏!')
username = input('请输入用户名:')
user_info = read_user_info()
if username not in [info[0] for info in user_info]:
register()
while True:
print('请选择您的操作:')
print('1. 猜拳游戏')
print('2. 准确率排行榜')
print('3. 退出游戏')
option = input('请输入操作编号:')
if option == '1':
result = game(username)
if result:
info = get_user_info(username, user_info)
info[1] = str(int(info[1]) + 1)
info[2] = str(int(info[2]) + 1)
write_user_info(user_info)
else:
info = get_user_info(username, user_info)
info[1] = str(int(info[1]) + 1)
info[3] = str(int(info[3]) + 1)
write_user_info(user_info)
elif option == '2':
ranks = get_accuracy_rank(user_info)
print('用户名\t准确率')
for rank in ranks:
print(rank[0] + '\t' + str(rank[1]))
elif option == '3':
print('谢谢游玩,再见!')
break
else:
print('请输入正确的选项编号!')
```
说明:
1. 用户注册功能:如果用户输入的用户名不存在于用户信息文件中,就会将该用户信息写入文件中,初始猜数次数、成功次数和失败次数都为0。
2. 文件读写功能:使用`with open()`上下文管理器读写文件,`readlines()`方法读取所有行并返回一个列表,`strip()`方法去掉每行结尾的换行符,`split()`方法按逗号分割每行内容并返回一个列表。
3. 获取用户信息:遍历用户信息列表,如果用户名匹配,则返回该用户信息列表。
4. 猜拳游戏:先随机选择电脑出拳,再让用户输入出拳选项。如果用户输入的选项不是石头、剪刀或布,就会提示用户重新输入;如果用户和电脑出拳相同,则是平局;如果用户胜利,则成功次数加1,否则失败次数加1。
5. 获取用户准确率:准确率等于成功次数除以猜数次数,使用`round()`方法保留两位小数。
6. 获取所有用户准确率并排序:将每个用户的用户名和准确率组成一个元组,加入到列表中,使用`sort()`方法按准确率从高到低排序。
7. 主程序:用户输入用户名后,如果该用户不存在于用户信息文件中,就会进行注册。接着,用户可以选择猜拳游戏、准确率排行榜或退出游戏。如果选择猜拳游戏,则会调用`game()`函数进行游戏,并更新用户信息文件。如果选择准确率排行榜,则会调用`get_accuracy_rank()`函数获取所有用户准确率并排序,然后输出排行榜。如果选择退出游戏,则会退出程序。
希望这份代码能够满足您的需求!
阅读全文