目录
后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
1.1 问题导引:
GIF演示: ![]()
“人生重开模拟器”是一款文字类小游戏. 玩家可根据提示输入角色的初始属性之后, 就可以开启不同的人生经历. 具体可以网上搜索“人生重启模拟器”,就能找到这款游戏的许多版本。
这里我们找到了一款版本用于演示: (以下图片源于网络,这里只用于演示学习) 链接网址:人生重启模拟器 游戏界面: ![]()
这里我们选择“技能”拉满选项(幻想一下那些我们所羡慕的故事里的开挂人生):
根据个人选择调整初始属性:
自动生成“重启”的人生:
人生总结:
以上就是我们在网上搜索用于演示的“人生重启模拟器”游戏,原来故事里的“开挂人生”是如此的顺利平坦,令人羡慕,作者自愧不如,而那终究是幻想,认清现实,依旧负重前行!
友情提示:适当参与游戏放松,过度游戏有害健康!
1.2 问题分析:
其实这款游戏的底层逻辑就是编程语言语句的交互运用。通过不同的语句交互(例如顺序语句、循环语句、判断语句等)根据不同的数据数值,执行相应的语句,打印相应的文字。
那么我们接下来就使用Python语言模拟实现这款游戏。由于完整的程序代码较多, 此处我们只实现其中的一部分逻辑,用于演示并巩固我们之前所学的Python的知识。
(1) 设置角色初始属性 在游戏中我们设定四个属性 .
- 颜值 (face)
- 体质 (strong)
- 智力 (iq)
- 家境 (home)
我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20. 如果玩家输入的初始属性不合理 , 就提示输入有误 , 重新输入。
(2) 设置生成角色的性别 通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数。
- 如果是单数, 则性别设为男孩
- 如果是双数, 则性别设为女孩.
男孩和女孩会遇到不同的事件 .
(3) 设置角色的出生环境及背景 首先按照家境 (home), 分成四个档位 .
- 10 是第一档. 加成最高
- [7, 9] 是第二档. 也有一些加成
- [4, 6] 是第三档. 加成较少
- [1, 3] 是第四档. 会扣掉属性.
生成 [1, 3] 的随机数 , 用来表示每一种细分情况 . 这里的代码主要就是各种 if else 构成
(4)对角色的不同人生阶段添加测试用例: 按照年龄 , 把人生经历分成四个阶段 :
- 童年阶段 [1, 10]
- 青年阶段 [11, 20]
- 壮年阶段 [20, 50]
- 老年阶段 50 岁以上.
每个阶段都会有不同的精力和事件发生 .
- 童年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
- 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化.
- 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性.
- 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高.
此处我们以童年为例 , 简单实现一下这里的处理逻辑 .
- 使用 for 循环, 按照年龄循环起来.
- 针对每一年, 先生成[1, 3]档, 根据不同的随机数值, 来触发不同的事件.
- 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织.
- 不同的事件可能会对属性有正面/负面的影响.
- 在每一年的最后, 打印这一年遇到的事情.
- 如果夭折, 则直接 sys.exit(0) 退出程序.
- 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.
童年阶段:
说明:由于是模拟实现“人生重启模拟器”,因此我们把基本原理学会后,可自行添加“脑洞大开”的人生经历,这里只简单的举例用于演示。
青年阶段:
壮年阶段:
老年阶段:
# 人生重开模拟器 import random import sys import time print("***************************************************") print('* *') print('* 《人生模拟重启器》——Python版 *') print('* *') print('* *') print('* 但惜今生,不问来世 *') print('* ——By 作者:新晓·故知 *') print('* *') print("***************************************************") #1. 设置角色初始属性 # 颜值、体质、智力、家境,这几项属性点数总和不能超过设定的阈值(这里我们设置为20), 每一项取值都是 1-10 之间 # 使用循环, 使玩家在输入错误的时候, 可以重新输入. while True: #尽管是while True,但不一定是死循环,可以在代码块里使用break跳出整个循环 print("请设置初始属性(可用属性点总数为 20)") face = int(input("请输入颜值属性点数(1-10):")) strong = int(input("请输入体质属性点数(1-10):")) iq = int(input("请输入智力属性点数(1-10):")) home = int(input("请输入家境属性点数(1-10):")) # 通过使用条件语句, 对于玩家输入的属性值做出校验检查 # 以下这段逻辑, 也可以使用elif:使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了. # 这里虽然没有使用 elif , 但是使用了 continue, 一旦某个条件满足, continue 就会跳出本次循环, 后续的条件判定不再执行 if face < 1 or face > 10: print("颜值属性点数设置有误!") continue if strong < 1 or strong > 10: print("体质属性点数设置有误!") continue if iq < 1 or iq > 10: print("智力属性点数设置有误!") continue if home < 1 or home > 10: print("家境属性点数设置有误!") continue if face + strong + iq + home > 20: # 如果当前的条件都没有被触发, 则认为玩家输入的数据是合法的. print("属性点数设置错误!属性点数之和超出阈值(20)") continue # 此时就可以跳出循环结束输入了 print("初始属性设置完成!") print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}") break # 2.设置生成角色的性别 # 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数 point = random.randint(1, 6) #此处的random是python中的一个模块! 相当于C++中的STL(封装好的代码块,我们直接使用即可!) #这里使用其他模块,需要先使用import语句,把模块的名字“导入”进来,pycharm有自动导入的功能 # print(f'point = {point}') if point % 2 == 1: gender = 'boy' print('你出生了,是个男孩。') else: gender = 'girl' print('你出生了,是个女孩。') # 3.设置角色的出生环境及背景 # 为了简单方便, 这里我们就直接生成 1-3 的随机数进行模拟 #这里我们将角色的家庭背景及环境设置四个档位梯度,不同档位会对属性有加成或减低 point = random.randint(1, 3) if home == 10: # 第一档 print('你出生在首都, 你的父母是高官政要') home += 1 iq += 1 face += 1 elif 7 <= home <= 9: # 第二档 if point == 1: print('你出生在大城市, 父母是公务员') face += 2 elif point == 2: print('你出生在大城市, 父母是企业高管') home += 2 else: print('你出生在大城市, 父母是大学教授') iq += 2 elif 4 <= home <= 6: # 第三档 if point == 1: print('你出生在县城, 你的父母是医生') strong += 1 elif point == 2: print('你出生在乡镇, 你的父母是老师') iq += 1 else: print('你出生在乡镇, 你的父母是个体户') home += 1 else: # 第四档 if point == 1: print('你出生在农村, 你的父母是辛苦劳作的农民') strong += 1 face -= 2 elif point == 2: print('你出生在农村, 你的父母奔波劳碌,家庭状况不是很好') home -= 1 else: print('你出生在穷乡僻壤, 你的父母艰辛茹苦,抚养你长大') strong -= 1 print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}') # 4.童年阶段 for age in range(1, 11): # 把一整年的打印都整理到一个字符串中, 在这一年的结尾统一打印 info = f'你今年 {age} 岁. ' # 生成一个 [1, 3] 的随机整数. point = random.randint(1, 3) # 接下来编写各种事件的代码 # 性别触发的事件 if gender == 'girl' and home <= 3 and point == 1: info += '你的家庭封建思想重男轻女,你不幸被遗弃!' print(info) print('游戏结束!') sys.exit(0) #sys也是python中提供的一个模块,直接使用即可 # 体质触发的事件 # 使用 elif 是为了保证每年只触发一个事件! elif strong < 6 and point < 3: info += '你患了一场大病' if home >= 5: info += '在父母的悉心照料下, 你康复了' strong += 1 home -= 1 else: info += '你的父母无法照料你, 你的身体每况愈下' strong -= 1 # 颜值触发的事件 elif face <= 4 and age >= 7: info += '你由于很丑, 其他小朋友不喜欢你. ' if iq > 5: info += '你决定通过学习提升自己!' iq += 1 else: if gender == 'boy': info += '你和别的小朋友经常打架!' strong += 1 iq -= 1 else: info += '你经常被别的小朋友欺负!' strong -= 1 # 智商触发的事件 elif iq < 5: info += '你有点呆呆的 ' if home >= 8 and age >= 6: info += '你的父母把你送到更好的学校学习' iq += 1 elif 4 <= home <= 7: if gender == 'boy': info += '你有运动天赋,立志成为运动员' strong += 1 else: info += '你学会了提升外在形象' face += 1 else: # 家境 < 4 info += '你虽然出身条件不好,但却有快乐的童年' if point == 1: strong -= 1 elif point == 2: iq -= 1 else: pass # 健康成长事件 else: info += '你一生健康,没有患过大病 ' if point == 1: info += '你的身体很强壮' strong += 1 elif point == 2: info += '你的自身条件不断提升' face += 1 else: # 无事发生 pass # 打印这一年发生的事情 print(info) print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}') print('------------------------------------------------------') # 为了方便观察, 加一个小小的暂停操作 time.sleep(1) #5.青年阶段 for age in range(11,20): info = f'你今年{age}岁.' point = random.randint(1,3) #性别触发的事件 if gender == 'boy' and home <= 3 and point == 1: info += '你爱而不得,你喜欢的人很讨厌你...' #体质触发的事件 elif strong > 6 and point < 3: info += '你参加省级运动会,并获得了金牌' if home >= 5: info += '你被以"体育特长生"的名义保送到顶尖大学深造' home += 1 strong += 1 else: info += '你的体育天赋被埋没...' home -= 2 face -= 1 #颜值触发的事件 elif face >=5 and home >= 7: info += '你被许多人喜欢,如众星捧月' if iq > 5: info += '你颜值、家境、才华并存,人生顺利平坦' home += 1 else: info += '你出身条件好,但却不能自立自强' iq -= 2 # 打印这一年发生的事情 print(info) print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}') print('------------------------------------------------------') # 为了方便观察, 加一个小小的暂停操作 time.sleep(1) #6.壮年阶段 for age in range(20,50): info = f'你今年{age}岁.' point = random.randint(1,3) #性别触发的事件 if gender == 'boy' and iq > 7: info +='你事业有成,家庭和睦' home += 2 face += 1 else: if home <= 3: info += '你自立自强,不接受命运安排' home +=2 strong +=2 else: info += '你平庸一生...' # 打印这一年发生的事情 print(info) print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}') print('------------------------------------------------------') # 为了方便观察, 加一个小小的暂停操作 time.sleep(1) #7.老年阶段 for age in range(50,110): info = f'你今年{age}岁.' point = random.randint(1,3) #性别触发的事件 if gender == 'girl' and home >= 6: info += '你子孙满堂,晚年享福' home += 1 strong += 1 #体质触发的事件 elif strong > 5 and iq > 6: info += '你是工作单位骨干,领导成员攻坚克难' if face >= 5: info += '你被应邀担任单位发言人' home += 2 else: #Do Nothing! pass # 打印这一年发生的事情 print(info) print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}') print('------------------------------------------------------') # 为了方便观察, 加一个小小的暂停操作 time.sleep(1)
说明:
import random
import sys
import time这是导入的封装好的模块,直接使用,方便简单。
![]()
“从某一方面来说,人生是选择出来的。虽然我们不能选择和决定我们的原生家庭,但是我们以后的人生走向却取决于我们此刻的选择与努力! 不必抱怨命运不公,我们从底层一路走来,见识过许许多多的人和事,也学会从不同角度看待这个社会。我们所经历的困苦与磨难,从某种角度而言,何尝不是独特的人生经历呢? 我们的人生,非言语所能概括和衡量!那些外人看不出、猜不透的故事才组成了我们的这一生!不要轻易否定一切,从不同角度看待,或许又是另一种理解。 我们的未来就在我们的脚下,但行好事,负重前行,别停留!”
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的