Prerequisite
实习的时候有个这样要求,虽然我不太想做,但毕竟是工作(其实还有点意思),于是我花了几个小时出(魔改)了几道,此贴作个记录
构建一个简易图书馆
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# @Author: Xiaotuan
"""
构建一个简易图书馆:
1. 可以存入书籍,每一本书籍的信息包含书名和作者(假设每一个信息都是不重复的)
2. 可以删除书籍,选中要删除书籍的书名或作者,即可删除
3. 可以修改书籍,选中要修改书籍的书名或作者,修改书籍的某个信息
4. 可以查询书籍,选中要查询书籍的书名或作者,查询该书籍的全部信息
5. 可以打印书籍,一次性打印出全部书籍信息
验证图书馆的可行性:
1. 存入书籍,三体 刘慈欣、白夜行 东野圭吾、意林 匿名,然后打印书籍
2. 删除书籍,作者 东野圭吾,然后打印书籍
3. 修改书籍,书名 意林,修改作者 黄帮主,然后打印书籍
4. 查询书籍,作者 刘慈欣,然后打印书籍
"""
class Library:
def __init__(self):
"""初始化字典"""
self.books = {}
def get_name(self, author):
"""根据作者找书名"""
for key, value in self.books.items():
if value == author:
return key
def add(self, name, author):
"""存入书籍"""
self.books[name] = author
print("已存入书籍:书名:《" + name + "》 作者:" + author)
def delete(self, judge, value):
"""删除书籍"""
if judge == "书名":
print("已删除书籍:书名:《" + value + "》 作者:" + self.books[value])
del self.books[value]
elif judge == "作者":
print("已删除书籍:书名:《" + self.get_name(value) + "》 作者:" + value)
del self.books[self.get_name(value)]
else:
print("输入错误,请重新输入")
def change(self, judge1, value1, judge2, value2):
"""修改书籍"""
if judge1 == "书名":
if judge2 == "书名":
print("已修改书籍:书名:《" + value2 + "》 作者:" + self.books[value1])
self.add(value2, self.books[value1])
del self.books[value1]
elif judge2 == "作者":
print("已修改书籍:书名:《" + value1 + "》 作者:" + value2)
self.books[value1] = value2
else:
print("输入错误,请重新输入")
elif judge1 == "作者":
if judge2 == "书名":
print("已修改书籍:书名:《" + value2 + "》 作者:" + value1)
del self.books[self.get_name(value1)]
self.add(value2, value1)
elif judge2 == "作者":
print("已修改书籍:书名:《" + self.get_name(value1) + "》 作者:" + value2)
self.books[self.get_name(value1)] = value2
else:
print("输入错误,请重新输入")
def find(self, judge, value):
"""查找书籍"""
if judge == "书名":
print("已查询书籍:", end="")
print("书名:《" + value + "》 ", end="")
print("作者:" + self.books[value])
elif judge == "作者":
print("已查询书籍:", end="")
print("书名:《" + self.get_name(value) + "》 ", end="")
print("作者:" + value)
else:
print("输入错误,请重新输入")
def print(self):
"""加上书名"""
print("图书馆信息如下:")
for name, author in self.books.items():
print("书名:《" + name + "》 ", end="")
print("作者:" + author)
print()
library = Library()
# 存入书籍
print("--------- 存入书籍 ---------")
library.add("三体", "刘慈欣")
library.add("白夜行", "东野圭吾")
library.add("意林", "匿名")
library.print()
# 删除书籍
print("--------- 删除书籍 ---------")
library.delete("作者", "东野圭吾")
library.print()
# 修改书籍
print("--------- 修改书籍 ---------")
library.change("书名", "意林", "作者", "黄帮主")
library.print()
# 查询书籍
print("--------- 查询书籍 ---------")
library.find("作者", "刘慈欣")
library.print()
约瑟夫问题
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# @Author: Xiaotuan
"""
约瑟夫问题:
1. N 个人围成一个圈,编号从 1 开始,依次到 N
2. 编号为 M 的游戏参与者开始报数,报数从 1 开始,后面的人报数接龙,直到 K 为止,报数为 K 的人将出局
3. 出局者的下一个玩家接着从 1 开始报数,如此循环,直到剩下一个玩家时游戏结束,这个玩家就是游戏获胜者
要求:
使用下面这个函数,使得满足约瑟夫问题,total 为 N 个人,begins 为编号 M 的人,count 为报数 K
def joseph(total, begins, count):
xxx
"""
def joseph(total, begins, count):
# 队列为 [1, 2, 3, ... , N]
queue = [i for i in range(1, total + 1)]
# 第一个出局者
# 为什么 -2,因为数组从 0 开始所以 -1,并且报数从自己开始所以 -1
death = (begins + count - 2) % len(queue)
# 一共 total - 1 局
for times in range(total - 1):
# 出局
print('出局的编号:', queue[death])
# 删除队列中出局的人
del queue[death]
# 为什么 -1,因为数组从 0 开始所以 -1,并且报数从下一个开始报数
death = (death + count - 1) % len(queue)
# 幸存者
print('幸存者:', queue[0])
joseph(10, 2, 3)
石头剪刀布
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# @Author: Xiaotuan
"""
石头剪刀布:
1. 一开始询问想玩多少轮,假设是 N 轮
2. 每一轮电脑和自己都有三种结果:电脑赢、自己赢、平局
3. 赢了的一方可以得到 1 分,当电脑得的分 + 自己得的分 == N 就退出循环
4. 根据最终的总分,输出三个结果中的一个:电脑赢、自己赢、平局
"""
import random
my_dict = {'R': "石头", 'P': "布", 'S': "剪刀"}
user_count = 0
comp_count = 0
games = int(input("你想要玩多少轮呢? "))
while (comp_count + user_count < games):
flag = 0
user_input = input("你要出什么呢?石头是 R 剪刀是 S 布是 P: ")[0]
user_input = user_input.upper()
for i in my_dict.keys():
if (user_input == i):
flag = 1
break
if (flag != 1):
print("输入错误")
continue
comp_input = random.choice(list(my_dict.keys()))
print("电脑输出的是: ", my_dict[comp_input])
if (user_input == 'R'
and comp_input == 'P') or (user_input == 'P' and comp_input
== 'S') or (user_input == 'S'
and comp_input == 'R'):
comp_count = comp_count + 1
elif (user_input == 'P'
and comp_input == 'R') or (user_input == 'S' and comp_input
== 'P') or (user_input == 'R'
and comp_input == 'S'):
user_count = user_count + 1
else:
print("平局")
print("\n分数:")
print("我的分数:", user_count, "\t电脑的分数:", comp_count, "\n")
print("\n\t\t最终结果:")
print("我的分数:", user_count, "\t\t\t电脑的分数:", comp_count, "\n")
if user_count > comp_count:
print("\n\t恭喜你赢了!")
elif user_count < comp_count:
print("\n\t\t很可惜你输了!")
else:
print("\n\t\tOOPS! 是平局!")
标签:count,项目,Python,self,简易,user,print,input,书籍
From: https://www.cnblogs.com/CourserLi/p/17151437.html