鱼C论坛

 找回密码
 立即注册
查看: 2812|回复: 5

[已解决]python中随机函数

[复制链接]
发表于 2022-10-7 20:40:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想用python写一个随机点名的代码,我自己尝试用random.randint()来表达,但我发现使用random()来表达会一个问题,就是有时会重复,比如:
import random

num = random.randint(0,50)

print(num)

当我去运行的时候,有时会打印1,有时也会打印2,但有时又会打印1,就会出现重新的数字,我想打印十次,但每次打印出来的数字都是不同的,该怎么实现呢?
如果有哪位大佬知道,麻烦能否耽误大家几分钟的时候教我一下,鄙人万分感谢!
最佳答案
2022-10-7 21:22:55
本帖最后由 jackz007 于 2022-10-7 21:28 编辑

        这个代码会在 [1 , 50] 的范围内随机产生 50 个不重复的元素列表
import random
c , d = 0 , []
while c < 50:
    x = random . randint(1 , 50)
    if not x in d:
        d . append(x)
        c += 1
print(d)
        运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
[16, 50, 32, 5, 40, 48, 21, 47, 19, 49, 28, 8, 25, 26, 42, 39, 31, 12, 10, 14, 35, 44, 18, 23, 7, 34, 17, 15, 33, 22, 27, 43, 46, 45, 1, 38, 2, 20, 9, 30, 6, 4, 36, 37, 3, 13, 29, 24, 41, 11]

D:\[00.Exerciese.2022]\Python>python x.py
[22, 16, 7, 15, 11, 12, 13, 9, 34, 2, 45, 32, 43, 50, 21, 17, 24, 14, 4, 47, 6,27, 19, 29, 37, 5, 33, 42, 36, 31, 49, 46, 35, 3, 38, 40, 41, 8, 26, 25, 48, 10, 28, 18, 30, 39, 44, 1, 20, 23]

D:\[00.Exerciese.2022]\Python>python x.py
[43, 37, 24, 16, 14, 1, 5, 21, 30, 49, 11, 17, 22, 7, 47, 12, 20, 18, 13, 44, 26, 48, 36, 28, 50, 10, 15, 41, 29, 6, 31, 38, 32, 42, 3, 40, 2, 8, 39, 33, 45, 34, 4, 25, 46, 19, 9, 35, 27, 23]

D:\[00.Exerciese.2022]\Python>python x.py
[49, 3, 1, 18, 28, 36, 23, 10, 38, 2, 34, 24, 30, 42, 25, 16, 12, 22, 9, 43, 11, 4, 8, 33, 27, 37, 32, 47, 39, 40, 41, 35, 6, 45, 48, 15, 21, 5, 14, 50, 17, 13, 7, 26, 20, 31, 44, 29, 46, 19]

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-7 21:01:20 | 显示全部楼层
可以用random.sample
这样取出的数据不会重复
说明:
random.sample([要取数据的列表], 要取出的数据个数)

返回值是一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 21:22:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-7 21:28 编辑

        这个代码会在 [1 , 50] 的范围内随机产生 50 个不重复的元素列表
import random
c , d = 0 , []
while c < 50:
    x = random . randint(1 , 50)
    if not x in d:
        d . append(x)
        c += 1
print(d)
        运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
[16, 50, 32, 5, 40, 48, 21, 47, 19, 49, 28, 8, 25, 26, 42, 39, 31, 12, 10, 14, 35, 44, 18, 23, 7, 34, 17, 15, 33, 22, 27, 43, 46, 45, 1, 38, 2, 20, 9, 30, 6, 4, 36, 37, 3, 13, 29, 24, 41, 11]

D:\[00.Exerciese.2022]\Python>python x.py
[22, 16, 7, 15, 11, 12, 13, 9, 34, 2, 45, 32, 43, 50, 21, 17, 24, 14, 4, 47, 6,27, 19, 29, 37, 5, 33, 42, 36, 31, 49, 46, 35, 3, 38, 40, 41, 8, 26, 25, 48, 10, 28, 18, 30, 39, 44, 1, 20, 23]

D:\[00.Exerciese.2022]\Python>python x.py
[43, 37, 24, 16, 14, 1, 5, 21, 30, 49, 11, 17, 22, 7, 47, 12, 20, 18, 13, 44, 26, 48, 36, 28, 50, 10, 15, 41, 29, 6, 31, 38, 32, 42, 3, 40, 2, 8, 39, 33, 45, 34, 4, 25, 46, 19, 9, 35, 27, 23]

D:\[00.Exerciese.2022]\Python>python x.py
[49, 3, 1, 18, 28, 36, 23, 10, 38, 2, 34, 24, 30, 42, 25, 16, 12, 22, 9, 43, 11, 4, 8, 33, 27, 37, 32, 47, 39, 40, 41, 35, 6, 45, 48, 15, 21, 5, 14, 50, 17, 13, 7, 26, 20, 31, 44, 29, 46, 19]

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-7 22:15:01 | 显示全部楼层
我有个另外的想法:
import random

li = [i for i in range(1, 51)]  # 1-50的列表
random.shuffle(li)

print(li.pop())  # pop()会弹出并返回列表最末尾的值
每次直接从后面弹就是了,或者每次再shuffle一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-8 13:59:54 | 显示全部楼层
jackz007 发表于 2022-10-7 21:22
这个代码会在 [1 , 50] 的范围内随机产生 50 个不重复的元素列表

        运行实况:

谢谢大佬的回答,本来我想给鱼币给您的,但我不知道如何给,抱歉!但还是十分谢谢您能抽空回复我的问题,谢谢!
我在大佬基础上添加了自己的一些想法,但发现还是会存在一些问题,但自己又说不上来.

import random
c , d = 0 , []

list1 =['刘德华','黎明','郭富城','张学友','任贤齐','周杰伦','谢霆锋','周润发','张国荣','周星驰','吴孟达']

num = random.randint(0,(len(list1)-1))
print(num)
# num = int(input('请输入数字随机偷取的名额:'))

while c <= len(list1):
    x = random . choice(list1)
    if not x in d:
        d . append(x)

    c += 1
print(d)
print(d[num])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-8 14:17:54 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-8 14:22 编辑
我[url=home.php?mod=space&uid=9]@小甲鱼 发表于 2022-10-8 13:59[/url]
谢谢大佬的回答,本来我想给鱼币给您的,但我不知道如何给,抱歉!但还是十分谢谢您能抽空回复我的问题,谢 ...

import random

c , d = 0 , []
list1 = ['刘德华','黎明','郭富城','张学友','任贤齐','周杰伦','谢霆锋','周润发','张国荣','周星驰','吴孟达']
while c < len(list1) :           # 必须是 "<",不可以 "<=" 会死循环
    x = random . choice(list1)
    if not x in d:
        d . append(x)
        c += 1                   # c = c + 1 应该和列表元素的添加同步,否则,d[] 中的元素数量会比 list1 少很多
print(list1)
print(d)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 09:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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