100个python算法超详细讲解:掷骰子

【100个python算法超详细讲解】@

谷歌学术

1.问题描述
骰子是一个有6个面的正方体,每个面分别印有1~6个小圆点代表点
数。假设这个游戏的规则是两个人轮流掷骰子6次,并将每次投掷的点数累
加起来,点数多者获胜,点数相同则为平局。
要求编写程序模拟这个游戏的过程,并求出玩100盘之后谁是最终的获
胜者。
2.问题分析
由于每个人掷骰子所得到的点数是随机的,所以需要借助随机数发生
器,每次产生一个1~6之间的整数,以此模拟玩者掷骰子的点数。
要得到6个不同的随机值,只需要调用Python的random模块提供的
random.randint()函数即可,这里为random.randint(1,6)。
为了计算在每盘中?、乙两人所掷的点数,需要定义两个变量d1和
d2,用于记录每个人投掷点数的累加和。
为了记录每个人的获胜盘数,需要再定义两个变量c1和c2,用于记录
每个人获胜的盘数。
3.程序框架
程序流程图如图7.13所示。

4.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 掷骰子
import random
import time
if __name__ == "__main__":
# c1和c2分别记录两个人的获胜盘数
c1 , c2 = 0, 0
print("两人开始掷骰子100次:")
for i in range(1, 101): # 100盘
d1 , d2 = 0, 0 # d1和d2分别记录两个人投掷点数的累加和
for j in range(1, 7): # 两个人轮流掷骰子
d1 = d1 + random.randint(1, 6) # 第一个人所掷骰子点数总和
d2 = d2 + random.randint(1, 6) # 第二个人所掷骰子点数总和
if d1 > d2:
c1 += 1 # 累加获胜盘数
else:
if d1 < d2:
c2 += 1
print("等待结果......")
time.sleep(5)
print("100次之后,获胜者是:")
if c1 > c2: # 输出最终获胜者信息
print("第一个人获胜!")
else:
if c1 < c2:
print("第二个人获胜!")
else:
print("两人平局!")

 5.运行结果
在PyCharm下运行程序,结果如图7.14所示。

6.补充知识点
在程序中,我们引入了一个新的模块time,并使用了time模块提供的
sleep()函数,该函数是让程序休眠一段时间,这里是5秒。下面我们具体介
绍time模块。
time模块提供了各种与时间相关的函数。下面介绍部分常用的函数。
(1)time.time()→float
time.time()函数返回浮点数的seconds since the epoch。epoch的具体日期
和leap seconds的处理取决于平台。在Windows和大多数UNIX系统上,
epoch是1970年1月1日00:00:00(UTC),并且闰秒不计入seconds since the
epoch。这通常被称为UNIX time。
(2)time.time_ns()→int
time.time_ns()函数的用法与time()相似,但该函数返回是以纳秒为单位
的自epoch以来的整数时间。
(3)time.thread_time()→float
time.thread_time()函数返回当前线程的系统和用户CPU时间之和的值
(以小数秒为单位)。它不包括睡眠期间经过的时间。根据定义,它是特
定于线程的。返回值的参考点未定义,因此只有同一线程中连续调用结果
之间的差异才有效。
(4)time.thread_time_ns()→int
time.thread_time_ns()函数的用法与thread_time()相似,但该函数返回的
是以纳秒为单位的时间。
(5)time.asctime([t])
time.asctime([t])函数用于转换一个元组或struct_time表示的时间,由
gmtime()函数或localtime()函数返回的字符串为'Sun Jun 20 23:21:05 1993'。
如果未提供t,则使用由localtime()函数返回的当前时间。区域信息不被函
数asctime()使用。
(6)time.clock()
在UNIX平台上,time.clock()函数将当前处理器时间返回为以秒为单位
的浮点数。
(7)time.pthread_getcpuclockid(thread_id)
time.pthread_getcpuclockid(thread_id)函数返回指定的thread_id的特定于
线程的CPU时间时钟的clk_id。
(8)time.clock_getres(clk_id)
time.clock_getres(clk_id)函数返回指定时钟clk_id的分辨率(精度)。
(9)time.clock_gettime(clk_id)→float
time.clock_gettime(clk_id)函数返回指定时钟clk_id的时间。
(10)time.clock_gettime_ns(clk_id)→int
time.clock_gettime_ns(clk_id)函数的用法与clock_gettime()相似,但该
函数是以纳秒的单位返回时间的。
(11)time.clock_settime(clk_id,time:float)
time.clock_settime(clk_id,time:float)函数设置指定时钟clk_id的时间。目
前,CLOCK_REALTIME是clk_id唯一可接受的值。
(12)time.clock_settime_ns(clk_id,time:int)
time.clock_settime_ns(clk_id,time:int)函数的用法与clock_settime()相
似,但该函数是以纳秒的形式设置时间的。
(13)time.ctime([secs])
time.ctime([secs])函数将自seconds since the epoch表示的时间转换为表
示本地时间的字符串。如果未提供secs或为None,则使用由time()返回的当
前时间。ctime(secs)相当于asctime(localtime(secs))。区域信息不被ctime()使
用。
(14)time.get_clock_info(name)
time.get_clock_info(name)函数获取有关指定时钟的信息作为命名空间
对象。
(15)time.process_time()→float
time.process_time()函数返回当前进程的系统和用户CPU时间总和的值
(以小数秒为单位)。
(16)time.process_time_ns()→int
time.process_time_ns()函数的用法与process_time()相似,但该函数是以
纳秒的形式返回时间的。
(17)time.sleep(secs)
time.sleep(secs)函数用于暂停执行调用线程达到给定的秒数。参数可以
是浮点数,以指示更精确的睡眠时间。
(18)time.strftime(format[,t])
time.strftime(format[,t])函数用于转换一个元组或struct_time表示的由
gmtime()函数或localtime()函数返回的时间到由format参数指定的字符串。
如果未提供t,则使用由localtime()函数返回的当前时间。format必须是一个
字符串。如果t中的任何字段超出允许范围,则引发ValueError。
strftime("%a,%d,%b,%Y,%H:%M:%S+0000",gmtime())
其中0是时间元组中任何位置的合法参数;如果format参数通常是非法
的,则该值被强制改为正确的值。
(19)time.strptime(string[,format])
time.strptime(string[,format])函数根据格式解析表示时间的字符串。返
回值为一个被gmtime()函数或localtime()函数返回的struct_time。
format参数使用与strftime()函数相同的指令,默认为匹配ctime()函数返
回格式的"%a %b %d %H:%M:%S %Y"。
更多关于time模块相关的知识点,请读者自行查阅学习。 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee达森

创作不易,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值