永发信息网

Python中,我想得到1~255随机整数,用rand.randint(1,255),但不想让里面170这个数出现,怎么写呢?

答案:6  悬赏:70  手机版
解决时间 2021-02-19 05:29
  • 提问者网友:人傍凄凉立暮秋
  • 2021-02-18 20:53
Python中,我想得到1~255随机整数,用rand.randint(1,255),但不想让里面170这个数出现,怎么写呢?
最佳答案
  • 五星知识达人网友:执傲
  • 2021-02-18 21:36
相当于是取1~254的随机数,然后如果得到的数大于等于170的话,就往后挪1,就达到你要的随机效果了。

a = random.randint(1, 254)
if a >= 170:
a += 1
全部回答
  • 1楼网友:平生事
  • 2021-02-19 00:52
#  Python 3 版本适用此代码,这段代码的思路是先生成一个符合要求的所有数字的列表。
#  然后从这个列表里除去不需要的170这个数字,再用随机函数在这个不包含170的数字集合中
#  随机出一个数字。
import random                 # 导入random这个库
a=list(range(1,256))          # 生成包含1到255这些数字的列表,注意range的参数是包头不包尾。
a.remove(170)                 # 从列表中去除170这个数字
print(random.sample(a,1)[0])  # 打印这个数字,sample方法两个参数的意义是(列表,取几个值)
  • 2楼网友:封刀令
  • 2021-02-19 00:33
import random
import pylab
def generate(n):
    list = []
    for i in range(n):
                                  
        a = random.randint(1,169)
        b = random.randint(171,255)
        if random.random() < 169.0 / 255.0:
            list.append(a)
        else:
            list.append(b)
    return list
pylab.hist(generate(10000),bins=254)
pylab.show()
看看,最后绘图,均匀分布
  • 3楼网友:深街酒徒
  • 2021-02-19 00:28

观看了楼主采纳的这个答案觉得不妥,虽然下面的代码也可以达到随机的效果。import random
a = random.randint(1, 254)
if a >= 170:
a += 1

但却不是真正的随机,真正的随机应该是先随机得到1-254之间的一个数,如果这个数等于170,再次随机,这样才能保证得到的数是完全随机出来的,而不能给随机出来的数加上1。
可以是下面这样的。import random
a=random.randint(1,254)
while(a==170):
a=random.randint(1,254)
print(a)

当然上面的随机是把170这个数也算入到里面去了,那么怎么去掉170这个数,再在1-169,169-254这两组数字之间随机呢?下面有一行代码可以得到随机整数import random
random.choice([x for x in range(1,254) if x!=170 ])楼主可以用type(x)来查看得到的数的类型,是个整数哦。

不知道是否满足楼主的需求?追问嗯,你说的对,昨天我问好之后就自己想到了和你一摸一样一样的方法,所以没多考虑就选了一个,谢谢你啦
  • 4楼网友:我住北渡口
  • 2021-02-19 00:04
import random
def numgen(start, ended, times=100, exceptset=set()):
    while times:
        x = random.randint(start, ended)
        if x in exceptset:
            continue
        yield x
        times -= 1
        
for n in numgen(1, 255, 10, set([170,]):
   print n
  • 5楼网友:山有枢
  • 2021-02-18 22:40
from random import *
a = range(1,256)
a.remove(170)
print sample(a, 1)[0]
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯