首页 > 编程语言 >Python 简易小项目

Python 简易小项目

时间:2023-02-24 15:02:22浏览次数:35  
标签:count 项目 Python self 简易 user print input 书籍

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

相关文章