鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 261

[复制链接]
 楼主| 发表于 2019-10-23 20:24:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-23 20:26:38 | 显示全部楼层
__mrsq__ 发表于 2019-10-23 20:22
这个好像是round函数输出0.125没进位,那我不用round你看看可以吗

res.append([n,num/d)])

有一个小小的语法错误,我帮你纠正了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-23 20:26:56 | 显示全部楼层
__mrsq__ 发表于 2019-10-23 20:22
这个好像是round函数输出0.125没进位,那我不用round你看看可以吗

恭喜通过!

执行用时:1178 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-23 20:33:05 | 显示全部楼层
zltzlt 发表于 2019-10-23 20:26
恭喜通过!

执行用时:1178 ms

谢谢版主大大,我看其他楼的大神好像也是在3个骰子的时候有进位问题,不一定是真的错了。emm还有可以问问你是怎么测试的吗?为啥我在自己的电脑上用time.perf_counter()的方法测试100个骰子也只要20多ms呀,是不是我把单位搞错了 = =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-23 22:06:55 | 显示全部楼层
Unicorn# 发表于 2019-10-23 21:05
哈哈哈哈哈哈我傻了
index函数只会返回它找到的第一个索引值
改了下

恭喜通过!

执行用时:934 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-23 23:30:48 | 显示全部楼层
  1. class Dice:
  2.    
  3.     def shake(self, n):        
  4.         if n == 0:
  5.             return None
  6.         
  7.         target = [[1,1,1,1,1,1],]        
  8.         
  9.         for i in range(1, n):
  10.             x = 5*(i+1)+1
  11.             target.append([0 for item in range(x)])
  12.             
  13.             for j in range(x):
  14.                 if j < 6:
  15.                     target[i][j] = (sum(target[i-1][0:j+1]))
  16.                 elif 6 <= j <= 3*i+2:
  17.                     target[i][j] = (sum(target[i-1][j-5:j+1]))
  18.                 else:
  19.                     break
  20.                
  21.             left = 0
  22.             right = len(target[i]) - 1
  23.             while left <= right:
  24.                 target[i][right] = target[i][left]
  25.                 left += 1
  26.                 right -= 1
  27.          
  28.         res = target[-1]
  29.         all = float(sum(res))
  30.         
  31.         result = []
  32.         pattern = '{{0:{0}.{1}f}}'.format(n+3, n+1)
  33.         
  34.         for index, item in enumerate(res, n):
  35.             prob = float(pattern.format(item/all))
  36.             result.append([index, prob])
  37.             
  38.         return result
  39.          
  40. if __name__ == '__main__':
  41.     dc = Dice()
  42.     result = dc.shake(5)
  43.     print(result)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 07:25:13 From FishC Mobile | 显示全部楼层
阴阳神万物主 发表于 2019-10-23 06:40
诶~居然是这样吗?不过小甲鱼不是说过吗?这种计时手段不精确啊,在计算单条语句执行用时的时候。

...

液氮超频能不能更快点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 07:51:00 | 显示全部楼层
18511353234 发表于 2019-10-24 07:25
液氮超频能不能更快点

也许?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 15:17:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 16:20:33 | 显示全部楼层
  1. def cal_dice_percentage(dice_num):
  2.     dice_possibility = 1
  3.     loop = dice_num
  4.     dice_point1 = [1,2,3,4,5,6] # 前n个骰子的点数和组合
  5.     dice_point2 = [1,2,3,4,5,6] # 第n+1骰子的点数
  6.     dice_point_list = [1,2,3,4,5,6]
  7.     result_list = []
  8.     final_list = []
  9.     for i in range(dice_num):
  10.         dice_possibility *= float(1/6)
  11.    
  12.     while loop > 1:
  13.         dice_point_list.clear()
  14.         loop -= 1
  15.         dice_point_list = [var1 + var2 for var1 in dice_point1 for var2 in dice_point2]
  16.         dice_point1 = dice_point_list.copy()
  17.    
  18.     for j in dice_point_list:
  19.         if not j in result_list:
  20.             result_list.append(j)

  21.     for point in result_list:   
  22.         dice_percent = dice_point_list.count(point) * dice_possibility
  23.         final_list.append([point,'%.10f'%dice_percent])
  24.    
  25.     return final_list
  26.    
  27. print(cal_dice_percentage(10))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 22:05:02 | 显示全部楼层
本帖最后由 wisky 于 2019-10-24 22:06 编辑


我的运行正常。我用的是Python 3.6 64bit,pycharm 社区版2019.2

输入3时,输出为[[3, 0.0], [4, 0.01], [5, 0.03], [6, 0.05], [7, 0.07], [8, 0.1], [9, 0.12], [10, 0.12], [11, 0.12], [12, 0.12], [13, 0.1], [14, 0.07], [15, 0.05], [16, 0.03], [17, 0.01], [18, 0.0]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 03:12:39 From FishC Mobile | 显示全部楼层
XiaoPaiShen 发表于 2019-10-23 23:30

能测测我的程序吗?是否正确,用多长时间?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-21 17:17:43 | 显示全部楼层
先写个简单的,效率堪忧,有空再思考……

  1. from itertools import  product


  2. def fun261(n):
  3.     dot = [1, 2, 3, 4, 5, 6]
  4.     temp = []
  5.     for i in product(dot, repeat=n):
  6.         s1 = 0
  7.         for k in range(len(i)):
  8.             s1 += i[k]
  9.         temp.append(s1)
  10.     temp_nr = list(set(temp))
  11.     result = []
  12.     for i in range(len(temp_nr)):
  13.         num = temp.count(temp_nr[i])
  14.         result.append([temp_nr[i], round(num/6**n, 2)])
  15.     return result


  16. print(fun261(3))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 16:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表