python 如何定义 random_python从入门到放弃篇14(class类,def自定义函数,random.randint随机数,if条件判断,input用户输入,for循环)实现掷骰子小程序...

昨天是一个伤感的一天,但是今天又是一个美好的一天。因为今天已不再是昨天了。今天是崭新的一天。

我们宿舍仍然在打游戏,很吵。不过,我已经习惯了,我会再忍受一年的时间,等大四,我就跟他们say“goodbye”。我时常想着提醒他们,但是我后来仔细想了,一个人愿意做的事,你越阻拦他,只会徒增他的反感而已。所以,我不会阻止,也不能阻止。我发现我们做事大多数是处于一种喜欢,有意思,愿意才会坚持做下去。所以,当你阻止一个人让他不做他喜欢的事是很困难的。要改变一个人的观念也是相同的道理。一个人根深蒂固的观念绝对不会因为你的分析,你的提醒而轻易改变。

当然,人生说完了,我们就应该聊聊我们的工作(程序)了,我这个程序,运用了class类的继承方法,继承是一个对于我们制作多个相同属性的类似对象的好方法,简单来说,就是假设,这里我们有一本书,然后,书都是纸制品,都是存储知识的载体,所以,尽管书是不同的,但是属性都是相同,书是一个广义上的大类,某种类型的书就是其子类(这是具有约束的)。所以,教科书就继承了广义上大类的书的属性,即教科书也是纸制品,也是存储知识的载体。这是我个人的偏见,如果有朋友有不同看法,可以跟我提出。

今天时间多一些,所以,我会说一下我的程序设计思路。上代码:

我们先创建一个骰子Six_Die对象(类),定义初始化函数def并且设置骰子面数为6,定义函数roll_die,输出掷一次骰子的点数,然后,再定义函数****ten_throw,来设置掷十次骰子的结果。

2c38a106af37078b87025b503aead442.png

运行结果:

22a89c669c5ce911d019306da9c23211.png

然而这并不是用户想要的方式,我们应该玩骰子有可能不会只掷骰子十次就结束了,所以,我们需要以用户的角度来考虑问题,我们就要先解决掷骰子的次数问题。,即想掷多少次就掷多少次。但是,由于用户可能操作失误输入负数,我们加进一条if语句用于设计简单报错机制。简单的安全意识要有。我们设计程序也要考虑到程序的可维护性。

于是就有了接下来的做法。将之前的roll_die和ten_throw合并。

461632d3a332a6bfd3f65bd77975e185.png

运行结果:

8c035418d183c1deb8a46c225ca5c1ab.png

bf44fa92f7712d9027c68630908cee30.png

762e6a126b7b177ad9b871d54e6dcda3.png

**六面骰子的设计告一段落了,那我们要设计十面骰子呢?我们就想到了继承,因为属性(特征)相同。这里,我们需要了解到超类(Super)**的使用。可将原来定义的初始化函数重新进行定义。于是就有了接下来的做法。

c1810ec5989a652820a7518bc38009fd.png

从图中我们可以看出在pycharm编辑器中行标的旁边有一个向上的箭头,表示继承和函数重写。

运行结果,如下图:

727d7078dfe6e9854b39da9c9e3aa121.png

c1b99c13b2acaa63b5966bc3cefe3f29.png

dba497f0fd20c0271bcc3c7bfd2ea0a7.png

然而,如果只是单一的说继承使用,我的偏见,其实已经说完了。但是,我们有没有更加简便的方法可以控制骰子的面数??这样就省去了我们每次都要重新定义的功夫。答案是:“有的,一切皆有可能!!”

我们其实只需要将一开始的sides值变换成可通过用户输入的sides值就可以实现了。

就像是这样的:

34d521692587a25d1833b1d9948a1bc5.png

但是,注意一点,将sides值变为可输入后,后面的函数中范围和输出结果也要相应改变,就像是这样的:

3abcef635221036fe8d717f11765db42.png

接下来,我们测试一下效果:

f1f9eb8b5eb9335c5faeef6c6552d5d9.png

运行结果:

273c2ceb35b17a6b94544e84d31c111e.png

8e1f246a67e7b83ca729befe092d6dd1.png

在最后的结果,我们其实就没有必要再调用ten_throw()和roll_die()了,我们可以直接简洁明了,就像是这样的:我们已经做好了任意面数,和无限制次数掷的骰子,因此,可以将名字改成Die了,而不是Six_Die(六面骰)。

c5a671619f91c0b26ee92efcc24d9955.png

运行结果,如下图:

3ac3df879279a0158af2c4810288114a.png

862ee589fa0c15113ec40d5d03ea535e.png

从最后的运行结果,我们发现了,我们可以用继承来重新做10面骰子,20面骰子,但是都不方便,因为要重写函数,其实我们只需要小小的改变一下sides值,就能实现任何面数的骰子了,并且可以无次数限制的掷。我们的思维方式有时候简单点还是比较好的,正所谓:“大道至简!!”

最后,感谢大家前来阅读鄙人的文章,文中或有诸多不妥之处,还望各位人士指出和海涵。

太困了,先睡觉了,搞了一下午的程序,终于写完博文了,等一下晚上还得补昨天的发文任务。

因为昨天没有发文。

原文链接:https://blog.csdn.net/weixin_43408020/article/details/107205658

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值