设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【每日一坑 1】 随机取数

  [复制链接]

0

主题

0

好友

16

积分

新手上路

Rank: 1

25#
发表于 2013-12-25 20:14:31 |只看该作者
  1. def a():
  2.         m = int(raw_input('输入随机出现多少个数'))
复制代码
这样定义怎么不对呢?
我想这样用
  1. if m > n:
  2.         print "你输入的随机数的个数大于你输入的最大数,请重新输入"
  3.         a()
复制代码
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

24#
发表于 2013-12-25 20:05:22 |只看该作者
  1. #coding:utf-8
  2. import random

  3. n = int(raw_input('输入最大数:'))
  4. print "你输入的最大的数是",n
  5. m = int(raw_input('输入随机出现多少个数(小于你的最大数)'))
  6. if m > n:
  7.         print "你输入的随机数的个数大于你输入的最大数,输入失败"
  8.         exit()

  9. list_n = []
  10. for a in range(1,n+1):
  11.         list_n.append(a)

  12. slice_m = random.sample(list_n,m)
  13. print slice_m
复制代码
回复

使用道具 举报

0

主题

0

好友

21

积分

新手上路

Rank: 1

23#
发表于 2013-12-18 17:52:29 来自手机 |只看该作者
h01m3s 发表于 2013-12-18 13:25
引用官方文档,不会重复。

感谢!我原本以为只是从population 中随机抽样生成新序列。原来是不重复抽样
回复

使用道具 举报

0

主题

0

好友

49

积分

新手上路

Rank: 1

22#
发表于 2013-12-18 13:25:33 |只看该作者
阿聪 发表于 2013-12-17 20:17
我用random.sample(range(1,n),m)
分别测试了100,1000。sorted(set(li))排序看结果
没发现重复啊,这个方法 ...
random.sample(population, k)
Return a k length list of unique elements chosen from the population sequence. Used for random sampling without replacement.


引用官方文档,不会重复。
回复

使用道具 举报

0

主题

0

好友

21

积分

新手上路

Rank: 1

21#
发表于 2013-12-17 20:17:47 |只看该作者
我用random.sample(range(1,n),m)
分别测试了100,1000。sorted(set(li))排序看结果
没发现重复啊,这个方法不会产生重复的吧?求解答
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

20#
发表于 2013-12-17 10:25:50 |只看该作者
本帖最后由 jox 于 2013-12-17 11:00 编辑

我试试,取出不重复的值
  1. import random

  2. def pick_M_from_N(n, m):

  3.   rawArr = range(1, n + 1)
  4.   resultArr = []

  5.   for i in range(0, m):
  6.     arrLength = len(rawArr)
  7.     pickedIndex = random.randint(0, arrLength - 1)
  8.     resultArr.append(rawArr[pickedIndex])
  9.     del rawArr[pickedIndex]
  10.    
  11.   return(resultArr)
  12.   
  13. if __name__ == "__main__":
  14.     print(pick_M_from_N(33, 6))
  15.     print(pick_M_from_N(16, 1))
复制代码
回复

使用道具 举报

0

主题

0

好友

49

积分

新手上路

Rank: 1

19#
发表于 2013-12-15 14:19:53 |只看该作者
  1. # -*- coding: utf-8 -*-
  2. #题目:从1~n中,随机取m个数。1<=m<=n

  3. import random

  4. def pick():
  5.         '''
  6.         Please make sure n, m are integers and 1 <= m <= n.
  7.         '''
  8.         try:
  9.                
  10.                 n = int(input('Give me a range of numbers: '))
  11.                 m = int(input('Tell me how many numbers that you want to pick: '))
  12.                 if 1 <= m <= n:
  13.                         print (sorted(random.sample([i for i in range(1, int(n)+1)], int (m))))
  14.                 else:
  15.                         print pick.__doc__

  16.         except:
  17.                 print pick.__doc__


  18. pick()
复制代码
借鉴了nodejx的random.sample用法
回复

使用道具 举报

0

主题

0

好友

389

积分

中级会员

Rank: 3Rank: 3

18#
发表于 2013-12-15 00:35:49 |只看该作者
randomList.py
  1. #! /usr/bin/env python

  2. import sys
  3. import random

  4. if __name__ == "__main__":
  5.     if len(sys.argv) != 3:
  6.         print 'Error! please print like this : ./randomList.py 5 3'
  7.     else:
  8.         n = int(sys.argv[1])
  9.         m = int(sys.argv[2])
  10.         #print n,m
  11.         if m > n:
  12.             print 'Input error,the first number must large than or equal to the second number'
  13.         else:
  14.             originList = range(1,n+1)
  15.             for i in range(n - m):
  16.                 x = random.choice(originList)
  17.                 originList.remove(x)
  18.             else:
  19.                 print originList
复制代码
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

17#
发表于 2013-12-13 23:19:58 |只看该作者
  1. # -*- coding:utf-8 -*-
  2. from random import choice
  3. n=raw_input('Please input a number n:')
  4. m=raw_input('Please input a number m(1=<m<=n):')
  5. li=[]
  6. for i in range(1,int(n)+1):#将1到n个数放入列表
  7.     li.append(i)
  8. for j in range(0,int(m)):#m次提取随机数并输出
  9.     a=choice(li)
  10.     print a
  11.     p=li.index(a)
  12.     li.pop(p)
复制代码
想在raw_input里输入中文时又出现乱码了,求先生指教
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

16#
发表于 2013-12-13 20:35:40 |只看该作者
#从1到n取m个数,不重复
import random
print('请输入取数的范围1~n')
n=int(input())
print('请输入取数的个数')
m=int(input())


a=[]
for i in range(1,n+1):
    a.append(i)

print('These figures are:')
for i in range(1,m+1):
    character=random.choice(a)
    a.remove(character)
    print(character)
   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-17 16:40 , Processed in 0.018668 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部