鱼C论坛

 找回密码
 立即注册
查看: 1398|回复: 9

想问下python随机的问题

[复制链接]
发表于 2019-7-23 16:59:56 | 显示全部楼层 |阅读模式
50鱼币
import random
lista = ['a','b','c','d','e','f']
listb = []
def shuiji():
    num = 0
    x= True
    while x:
        a = random.choice(lista)
        num+=1
        if a not in listb:
            listb.append(a)
        else:
            continue
        if len(listb) == 6:
            x =False
            break
    print(listb)
    print(num)
    return num
shuiji()
上面是代码,我想让shuiji()这个函数运算100次,然后求平均值,怎么写的啊,我每次随机出来都是一样的,随机100次的代码就不贴了,没成功过,上面代码应该是没问题的

最佳答案

查看完整内容

代码槽点有点多..你这个lista listb都是全局变量 第一次循环以后listb就有6个东西了 之后再shuiji() len(listb)==6 直接break了 当然每次结果都一样 如果目的是生成随机顺序的abcdef 那重写一下大概是这样 好像还要求均值 那
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-23 16:59:57 | 显示全部楼层
本帖最后由 ietar 于 2019-7-24 09:47 编辑

代码槽点有点多..你这个lista listb都是全局变量 第一次循环以后listb就有6个东西了 之后再shuiji() len(listb)==6 直接break了 当然每次结果都一样

如果目的是生成随机顺序的abcdef 那重写一下大概是这样
  1. import random


  2. def get_rd_list():
  3.     a = ['a', 'b', 'c', 'd', 'e', 'f']
  4.     b = []
  5.     while a:
  6.         b.append(a.pop(random.randint(0, len(a)-1)))
  7.     print(b)

  8. if __name__ == '__main__':
  9.     for _ in range(100):
  10.         get_rd_list()
复制代码


好像还要求均值 那
  1. import random


  2. def get_rd_list():
  3.     a = ['a', 'b', 'c', 'd', 'e', 'f']
  4.     b = []
  5.     global count
  6.     while len(b) != len(a):
  7.         getone = random.choice(a)
  8.         if getone not in b:
  9.             b.append(getone)
  10.         count += 1
  11.     print(b)

  12. if __name__ == '__main__':
  13.     times = 100
  14.     count = 0
  15.     for _ in range(times):
  16.         get_rd_list()
  17.     print(count/times)

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

使用道具 举报

发表于 2019-7-23 19:08:17 | 显示全部楼层
要使用random.seed()设置一下随机数种子,才能保证每次运行结果不同.具体要确认一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 09:06:48 | 显示全部楼层
并不会重复啊

import random

for x in range(40):
  a=random.randint(10000,100000)
  b=random.randint(10000,100000)
  print("%d+%d=%d"%(a,b,a+b))
  
  
'''
E:\pytest>python ex33.py
34601+28229=62830
85355+86595=171950
86076+81177=167253
79027+12798=91825
45617+76747=122364
79884+32930=112814
12373+47636=60009
85167+32028=117195
46358+42687=89045
37794+93304=131098
77401+72151=149552
11350+12719=24069
69509+78004=147513
50500+61283=111783
92590+24881=117471
41552+20742=62294
72571+64175=136746
47710+98450=146160
24024+24487=48511
49009+95407=144416
25590+23020=48610
82103+95526=177629
20818+40395=61213
68520+83187=151707
15909+95986=111895
92266+58760=151026
70892+57673=128565
80185+64990=145175
38120+64035=102155
52745+60914=113659
22263+12964=35227
24496+77270=101766
58746+63027=121773
23177+27730=50907
91193+75653=166846
16192+78331=94523
73543+17254=90797
64071+38686=102757
72361+87317=159678
61946+64586=126532
'''  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 09:48:30 | 显示全部楼层
跑了几次 大概平均在14次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 20:44:52 | 显示全部楼层
def shuiji():
    i=0
    mini=0
    import random
    for i in range(100):
        
        lista = ['a','b','c','d','e','f']
        listb = []
        num = 0
        x= True
        while x:
            a = random.choice(lista)
            num+=1
            if a not in listb:
                listb.append(a)
            else:
                continue
            if len(listb) == 6:
                x =False
                break
        print(listb)
        print(num)
        mini += num
        i +=1
    print('mini='+str(mini))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-25 22:15:48 | 显示全部楼层
ietar 发表于 2019-7-23 16:59
代码槽点有点多..你这个lista listb都是全局变量 第一次循环以后listb就有6个东西了 之后再shuiji() len(li ...

谢谢大神,你这个代码确实比较简洁,就有一个地方看不懂, for _ in range(),前面的这个‘_'代表啥意思啊,我貌似用任何字母代替都可以.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-25 22:20:00 | 显示全部楼层
洛夫司机不死机 发表于 2019-7-24 20:44
def shuiji():
    i=0
    mini=0

谢谢大神,你修改的这个代码确实可以用,我又改了下,我想要的结果是求平均值,你这个是求的总和,mini/100就好了,还是感谢你给了我思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-25 22:21:28 | 显示全部楼层
wp231957 发表于 2019-7-24 09:06
并不会重复啊

import random

这个跟我的问题不一样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-26 09:23:59 | 显示全部楼层
旋风兔 发表于 2019-7-25 22:15
谢谢大神,你这个代码确实比较简洁,就有一个地方看不懂, for _ in range(),前面的这个‘_'代表啥意思啊 ...

因为循环里没用到这个变量 就用_了 经常从py2的文章里见到 其实就是用什么都行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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