20211121杨博川《Python程序设计》实验四报告
学号 20211121《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2111
姓名: 杨博川
学号:20211121
实验教师:王志强
实验日期:2022年5月26日
必修/选修: 公选课
1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
我选择了运用所学知识和自己的理解制作了一个简易的游戏盒子,包含三款小游戏可供玩家选择。
2.实验过程及结果
2.1.程序简介
2.1.1登陆装置
首先设置一个简单的登陆装置为主体大框架,可自己设置账户密码并登录,切换游戏需重新登录
登陆后进入游戏选择界面
2.1.2游戏选择装置
首先,为了增加盒子的真实感与节奏感,设置时间加载装置
然后展示选择装置,选择后跳入各个游戏中
2.1.3游戏简介
2.1.3.1猜大小游戏
游戏总体较复杂,可玩性较高,将根据用户年龄不同给予不同难度,并允许使用各类道具进行游戏,结束后将回到登陆界面
根据年龄给予不同初始金币
介绍游戏规则
游戏过程中,玩家金币数将会动态变化,并可以使用多种道具,可玩性较强
最后结束将会返回登陆界面
2.1.3.2猜拳游戏
朴实无华的人机对弈猜拳游戏,亮点是在游戏中增添了可以随时查看积分的程序,具体介绍在图片中程序逻辑较简单,不赘述。
最后结束将会返回登陆界面
2.1.3.3数字炸弹游戏
灵感来自于初识python这一朋友时,老师教的猜数游戏,我将其改造成了互动性较高的人机对弈数字炸弹游戏,游戏玩法较简单,不赘述。
最后结束将会返回登陆界面
2.1.4重选模块
若玩家不想开始选中游戏,则可重新进入盒子选择
2.2源代码
点击查看代码
init_username = input("Master,please enter initial username:")
init_password = input("Master,please enter initial password:")
flag0 = 0
flag1 = 0
print("\n")
print("\n")
print("\n")
print("\n")
print("\n")
print("\n")
print(">>>User Login<<<")
def shuzizhadan():
result = input('是否开始游戏 yes or no : ')
if (result.lower() == 'yes'):
import random
import time
bomb = random.randint(1, 999)
print(bomb)
start = 0
end = 999
while 1 == 1:
people = int(input('请输入{}到{}之间的数:'.format(start, end)))
if people > bomb:
print('大了')
end = people
elif people < bomb:
print('小了')
start = people
else:
print('BOOM!!!')
break
print('等待电脑了输入{}到{}之间的数:'.format(start, end))
time.sleep(1)
com = random.randint(start + 1, end - 1)
print('电脑输入:{}'.format(com))
if com > bomb:
print('大了')
end = com
elif com < bomb:
print('小了')
start = com
else:
print('BOOM!!!')
break
else:
youxi1()
def youxi():
import time
t = 500
for n in range(t + 1):
loading = round(n / t * 100)
print(f"\r游戏盒子加载中.... {loading}%", end="")
time.sleep(0.0001)
print('小游戏盒子'.center(50, '*'))
print('*'.ljust(53, ' '), '*')
print('*', end='')
print("1.猜拳游戏".center(49), end='')
print('*')
print('\n')
print('*', end='')
print("2.猜大小 ".center(49), end='')
print('*')
print('\n')
print('*', end='')
print("3.数字炸弹 ".center(49), end='')
print(' *')
print('*'.ljust(53, ' '), '*')
print('*' * 54)
s = int(input("\n请选择一个游戏(输入0退出小游戏盒子T_T):"))
if s == 2:
print('-----猜大小-----')
caidaxiao()
elif s == 1:
print('---猜拳游戏----')
caiquan()
elif s == 3:
print('-----数字炸弹-----')
shuzizhadan()
else:
print('即将退出游戏盒子,欢迎下次游玩!')
exit()
def caidaxiao():
import time
import random
age = int(input('您好,请输入您年龄:'))
user_info = {'name': usr, 'age': age}
user_properties = ['X3 x1-5']
properties = ['X3 (250G)', 'X1-5 (300G)']
if 10 < user_info['age'] < 18:
glod = 1000
elif 18 <= user_info['age'] <= 30:
glod = 1100
else:
glod = 500
user_info['glod'] = glod
print("{}您好,欢迎游玩本游戏,您的初始金币为:{}".format(user_info['name'], user_info['glod']))
print("\n")
time.sleep(1)
print('游戏说明'.center(50, '*'))
print('*'.ljust(53, ' '), '*')
print('*', end='')
print("电脑每次投掷三枚骰子,总点数>=10为大,否则为小".center(32), end='')
print('*')
print('*'.ljust(53, ' '), '*')
print('*' * 54)
print("\n")
result = input('是否开始游戏 yes or no : ')
if (result.lower() == 'yes'):
while True:
dices = []
for i in range(0, 3):
dices.append(random.randint(1, 6))
total = sum(dices)
user_input = input('请输入big OR small : ')
u_input = user_input.strip().lower()
time.sleep(1)
print('骰子点数为:{}'.format(dices), end=' ')
if (total >= 10 and u_input == 'big') or (total < 10 and u_input == 'small'):
print('您赢了!!!')
multi = 1
if len(user_properties) > 0:
use_pro = input('是否使用道具: ')
if use_pro.lower() == 'yes':
use_pro = int(input('请选择使用第几个道具{} :'.format(user_properties)))
use_pro -= 1
# 判断道具类型
if user_properties[use_pro] == 'X 3':
multi = 3
print('奖金翻3倍')
elif user_properties[use_pro] == 'X 1-5':
multi = random.randint(1, 5)
print('奖金翻{}倍'.format(multi))
user_properties.remove(user_properties[use_pro])
user_info['glod'] += 100 * multi;
else:
print('您输了!')
user_info['glod'] -= 100;
if (user_info['glod'] <= 0):
print('您的金币已经用完,感谢您的游玩')
break
if user_info['glod'] % 1000 == 0:
shop = input('您现在有金币:{},是否购买道具 yes or no: '.format(user_info['glod']))
if shop.lower() == 'yes':
good_num = int(input('请选择要购买第几个道具 {}'.format(properties)))
if good_num == 1:
user_properties.append('X 3')
user_info['glod'] -= 250
print('购买成功!消耗金币250')
elif good_num == 2:
user_properties.append('X 1-5')
user_info['glod'] -= 300
print('购买成功!消耗金币300')
else:
print('没有该道具,您失去了这次机会')
else:
print('您现在有金币:{} '.format(user_info['glod']))
else:
youxi1()
def caiquan():
result = input('是否开始游戏 yes or no : ')
if (result.lower() == 'yes'):
import random
choices = ["Rock", "Paper", "Scissors"]
computer = random.choice(choices)
player = False
cpu_score = 0
player_score = 0
while True:
print("use E to check your score")
player = input("Rock,Paper or Scissors?").capitalize()
if player == computer:
print("Tie!")
elif player == "Rock":
if computer == "Paper":
print("You lose!", computer, "covers", player)
cpu_score += 1
else:
print("You win!", player, "smashes", computer)
player_score += 1
elif player == "Paper":
if computer == "Scissors":
print("You lose!", computer, "cut", player)
cpu_score += 1
else:
print("You win!", player, "covers", computer)
player_score += 1
elif player == "Scissors":
if computer == "Rock":
print("You loss...", computer, "smashes", player)
cpu_score += 1
else:
print("You win!", player, "cut", computer)
player_score += 1
elif player == "E":
print("Final Scores:")
print(f"CPU:{cpu_score}")
print(f"Player:{player_score}")
break
else:
print("That's not a valid paly.Check your spelling!")
computer = random.choice(choices)
else:
youxi1()
def youxi1():
q = int(input('是否继续游戏?\n键入0退出该游戏,返回游戏盒子\n键入1直接退出整个游戏盒子\n'))
if q == 0:
youxi()
elif q == 1:
print('\n即将退出游戏盒子,欢迎下次游玩!\n')
exit()
while True:
usr = input("Master,please enter username:")
if usr == init_username:
while flag0 < 3:
password = input("Master,please enter password:")
if password == init_password:
print("Success Login~")
flag1 = 1
youxi()
else:
flag0 += 1
if flag0 <= 2:
print("Master,Wrong Password,enter again!~")
if flag1 == 1:
break
flag0 = 0
print("Wrong Password,login again!")
else:
print("Wrong Username,enter again!")
2.3在华为云服务器上运行
2.3.1开机华为云虚拟机(学期始已购买)
2.3.2putty连接虚拟机
2.3.3winscp导入源码文件
2.3.4运行
在putty中运行三个游戏,并实现创建用户名与密码,登录用户,游戏,退出再次登陆,重选游戏,退出游戏盒子等功能。(视频链接在图片流程后)
1.创建用户名与密码并登录用户
2.进入游戏一,猜拳游戏,并查看分数,返回登录界面
3.进入游戏二,猜大小,并演示选中后重新返回游戏菜单选择游戏
4.进入游戏三,数字炸弹,本局电脑踩到炸弹,游戏结束,返回登陆界面
5.退出游戏盒子,运行完毕,删除winscp中的文件,此时已检测不到文件夹
2.3.5putty上华为云虚拟机运行视频展示
3.致谢+课程总结
呼,行文至此,不知不觉也到了跟python,王老师这两位颇有意思的老友暂别之时。根据学姐的推荐,我选择了这门她口中“很有意思,也很有用的”大热门python程序课。初识王老师,感觉到他身上的年轻动力,同样昭示着这是一门不无聊且令人喜爱的课程。然而,在学习了第一次课后,安装软件,安装pycharm,注册码云,链接putty,上传代码,可着实是让我好好喝了一壶。在完成了这一切之后,我恐怕才是有了探索python这一语言的基础。在随后的课程中,按照我的印象,我们依次学习了
1.Python语言基础
2.流程控制语句
3.基本数据类型
4.字符串
5.循环语句和流程控制语句
6.列表、元组、字典、集合及其常用功能
7.正则表达式
8.面向对象程序设计 (三要素:封装、继承、多态)
9.文件操作
10.Socket编程
11.Python操作数据库
12.Python爬虫爬取想要的内容
13.一些小游戏代码:
小学生计算题库:
点击查看代码
# 编辑 者:岭轻
# 学 院:北京电子科技学院
# 开发时间: 18:27
import random
opcode = ["+","-","*","/"]
flag = random.choice(opcode)
a = random.randint(1,100)
b = random.randint(1,100)
if flag == "+":
result = a + b
elif flag == "-":
result = a - b
elif flag == "*":
result = a * b
else :
result = a / b
print("亲爱的李宜时大帅哥o((>ω< ))o:请听题")
print("题目:",str(a)+ flag + str(b) + "=?" )
answer = int(input("请输入答案!哈哈\n"))
if result == answer:
print("对了!我的宝ヾ(≧▽≦*)o")
else:
print("继续算吧,我的宝(︶^︶)")
点击查看代码
import random
#随机生成一个整数
randomnumber = random.randint(1,100)
a = int(input("来猜一猜呀,是一个整数哦:"))
flag = False
while flag == False:
if a > randomnumber:
print("你猜的这个数字有点大呀")
a=int(input())
elif a < randomnumber:
print("你猜的这个数字有点小呀")
a = int(input())
else:
print("嘿嘿,你终于猜对了啊!")
flag = True
点击查看代码
# 编辑 者:岭轻
# 学 院:北京电子科技学院
# 开发时间: 18:52
# put hands together and be my own god
print("岭轻的计算器1代")
flag = True
while flag == True:
choice = input("请选择你想要的计算器类型:0为基础版、1为复数版\n")
op = input("请输入希望的运算(+,-,*,/,%,//)\n")
if op == "0":
break
if choice == "0":
a = int(input("请输入操作数a\n"))
b = int(input("请输入操作数b\n"))
elif choice == "1":
a = complex(input("请输入第一个复数\n"))
b = complex(input("请输入第二个复数\n"))
result = 0
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
result = a / b
elif op == "%":
result = a % b
elif op == "//":
result = a // b
elif op == "0":
flag = False
else:
print("输入有误,请再试一次\n")
continue
print(a,op,b,"=", result,"\n")
点击查看代码
# 编辑 者:岭轻
# 学 院:北京电子科技学院
# 开发时间: 18:43
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',8001))#绑定.Localhost = 127.0.0.1
s.listen()#监听
conn,address = s.accept()#阻塞
data = conn.recv(1024)
print(data.decode())
conn.sendall(("娇娇收到:"+str(data.decode())).encode())
s.close()
点击查看代码
# 编辑 者:岭轻
# 学 院:北京电子科技学院
# 开发时间: 19:27
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
str = input("要给娇娇发什么呀:")
s.sendall(str.encode())
data = s.recv(1024)
print(data.decode())
s.close()
点击查看代码
# 编辑 者:岭轻
# 学 院:北京电子科技学院
# 开发时间: 19:43
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
file1 = open("hello",'r+', encoding="GBK")
file1.write("hhhhhhhh")
str1 = file1.readlines()
file1.close()
#str = input("要给娇娇发什么呀:")
s.sendall(str(str1).encode())
data = s.recv(1024)
print(data.decode())
s.close()
总体来讲就是这些吧,每节课真的学的到很多有意思也能够理解的新知识,虽然跟上王老师的惊人手速也很难啦~( TロT)σ,除了课上的小知识外,我更多的是了解到了pycharm中可以安装如此多的外部库,相较于c语言我认为是更人性化,更为普适化的功能;还有就是csdn的测评作业,让我知道了这样一个体量大,知识多,大佬多的平台,同时也让我真正掌握了一个名叫markdown的编译器,这篇最后的博文就是用它来完成的,相信在日后的学习中,我将从中学到很多很多东西,很感谢王老师布置这次测评作业(我还捞了件短袖嘿嘿o((>ω< ))o)。
最后给一点点个人的建议吧,第一就是王老师代码速度真的很快,可以课后或课前在群里发一下代码截图或者源码之类的~ 第二就是王老师可以使用一下我们测评过的python技能树,教我们一点一点的点亮他,会更清晰~。好啦,给我们可爱的王老师吹毛求疵就到这里了。
最后,不知道与王老师,与python,与各位同学们的缘分还能否续上,诸位引我于低谷,照我以通途,我受益良多,与诸位就此别过,祝,他日凌云,万事胜意!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)