Crossin的编程教室

标题: 【每日一坑 1】 随机取数 [打印本页]

作者: crossin先生    时间: 2013-12-12 18:38
标题: 【每日一坑 1】 随机取数
根据Byron同学的建议,尝试「每日一坑」:我出一道题目,一般是比较小的编程问题。大家自行练习。写完的请把答案发到论坛上“编程擂台”板块中。第二天(或者第n天),我会挑选答案反馈给大家。以此增加各位写代码的动力,多看多练。


今天来挖第一坑。题目很简单:
从1~n中,随机取m个数。1<=m<=n

写好这题,你可以拿它算出来的值去买双色球。。。


作者: nodejx    时间: 2013-12-12 19:46
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Copyright 2013 nodejx

  4. import random
  5. #从1-n中取m个数字。
  6. def choice(n,m):
  7.         if 1 <= int(m) <= int(n):
  8.                 return sorted(random.sample([i for i in xrange(1,int(n)+1)], int(m)))
  9.         else:
  10.                 return "请确认 '1<=m<=n'!"
  11. #从1-1000随机取99个数字。
  12. print choice(1000,99)
复制代码

作者: byron    时间: 2013-12-12 20:36
  1. #!/usr/bin/python
  2. #coding:utf-8
  3. #author:byron
  4. #blog:http://jiabin.tk

  5. import random
  6. def m_n():
  7.         print("本程序会从1~n中随机取m个数,1<=m<=n")
  8.         n = int(input("输入n的值:"))
  9.         m = int(input("输入m的值:"))
  10.         random_num = set()
  11.         if 1 <= m <= n:
  12.                 while len(random_num) != m:
  13.                         random_num.add(random.randint(1,n))
  14.                 print(random_num)
  15.         else:
  16.                 print("="*40)
  17.                 print('请确认1<=m<=n')
  18.                 print('='*40)
  19.                 m_n()
  20. m_n()
复制代码

作者: judy    时间: 2013-12-12 23:27
本帖最后由 judy 于 2013-12-12 23:29 编辑


import random
def tool():
    m=input("需要几个数:")
    n=input("最大值:")
    if 1 <= int(m) <= int(n):
        for i in range(m):
            num=random.randint(1,n)
            print num
    else:
        print"请确认最大值超过所需数字个数"
tool()
   
   

作者: fl0w    时间: 2013-12-12 23:55
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.             randomList = []
  16.             for i in range(m):
  17.                 x = random.randint(1,len(originList))      
  18.                 randomList.append(originList[x - 1])
  19.                 originList.remove(originList[x - 1])
  20.             else:
  21.                 randomList.sort()
  22.                 print randomList
复制代码

作者: xuefu    时间: 2013-12-13 01:09
本帖最后由 xuefu 于 2013-12-13 01:21 编辑
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>

  5. int main(int argc, const char *argv[])
  6. {
  7.   int a, n, m, i = 0, j = 0;
  8.   int* secret;

  9.   printf("Input n: ");
  10.   scanf("%d", &n);

  11.   assert(n > 1 || n == 1);

  12.   printf("Input m: ");
  13.   scanf("%d", &m);

  14.   if(m > 0 && !(m > n))
  15.     printf("Below is the number: \n");
  16.   else
  17.   {
  18.     printf("the number m should be greater than zero and not larger than n.\n");
  19.     exit(0);
  20.   }

  21.   secret = malloc(sizeof(int) * m);
  22.   srand(time(NULL));

  23.   while(m--)
  24.   {
  25.     /* generate the number you want */
  26.     while(1)
  27.     {
  28.       a = rand() % n + 1;
  29.       /* check a whether is repeated */
  30.       for (j = 0; j < i; j++)
  31.       {
  32.         if (a == secret[j])
  33.         {
  34.           a = 0;
  35.           break;
  36.         }
  37.       }
  38.       if(a != 0)
  39.         break;
  40.     }
  41.     secret[i] = a;
  42.     printf("%d  ", secret[i++]);
  43.   }
  44.   printf("\n");

  45.   free(secret);
  46.   return 0;
  47. }
复制代码

作者: xuefu    时间: 2013-12-13 01:11
judy 发表于 2013-12-12 23:27
import random
def tool():
    m=input("需要几个数:")

明显得到的数可能会重复。。。
作者: byron    时间: 2013-12-13 08:55
xuefu 发表于 2013-12-13 01:11
明显得到的数可能会重复。。。

你这是C啊?
作者: TongShan    时间: 2013-12-13 10:39
本帖最后由 TongShan 于 2013-12-13 10:43 编辑
  1. import random

  2. def ball(n, m):
  3.     ball = random.sample(range(1, n+1), m)
  4.     ball.sort()
  5.     print ball
复制代码

作者: liucy    时间: 2013-12-13 11:18
  1. import random

  2. def pick(n, m):
  3.     if 1<=m<=n:
  4.         resultnum = []
  5.         while(m > 0):
  6.             resultnum.append(random.randint(1,n))
  7.             m = m - 1
  8.         return (resultnum)
  9.     else:
  10.         print "Please make sure 1<=m<=n"

  11. if __name__ == "__main__":
  12.     n = int(input ("Please input a number n: "))
  13.     m = int(input ("Please input a number(Make sure 1<=m<=n) m: "))
  14.     print "Your result number is: " + str(pick(n, m))
复制代码

作者: 歪脑特    时间: 2013-12-13 11:45
本帖最后由 歪脑特 于 2013-12-13 11:53 编辑
  1. # Randomly pick m numbers from 1~n. 1<=m<=n.

  2. import random

  3. n = int(input("Input a value for n: "))
  4. m = int(input("Input a value for m: "))

  5. L = list(range(1,n))
  6. MList = []

  7. for i in range(m):
  8.     tmp = random.choice(L)
  9.     if tmp in MList:
  10.         tmp = random.choice(L)
  11.     MList.append(tmp)

  12. print(MList)
复制代码

作者: xuefu    时间: 2013-12-13 11:47
byron 发表于 2013-12-13 08:55
你这是C啊?

楼主没说一定要用Python啊。。。吱吱,还不会Python
作者: byron    时间: 2013-12-13 13:35
xuefu 发表于 2013-12-13 11:47
楼主没说一定要用Python啊。。。吱吱,还不会Python

嗯嗯,用C很厉害的。
作者: aurora    时间: 2013-12-13 15:32
来填坑了~
def m(m, n):
    import random
    return [random.randint(1, n) for i in xrange(m)]
   
作者: vose    时间: 2013-12-13 18:45
  1. #coding:utf-8
  2. #从1到n 取m个数 1<=m<=n
  3. from random import randint

  4. print "---------------------------------"

  5. try:
  6.     n = input("Please input number of N > ")
  7. except NameError:
  8.     print "Please check your input, needs number only"
  9.     n = input("Please input number of N > ")
  10.    
  11. number_list = []
  12. for i in range(1,n+1):
  13.     number_list.append(i)
  14.    
  15. m = randint(1,n)
  16. print "Get",m,"number"
  17. get_number = []
  18. for i in range(0,m):
  19.     x = randint(1,n-1)
  20.     get_number.append(number_list[x])
  21.    
  22. print "\nDone\n"
  23. for i in get_number:
  24.     print i,
  25.    
  26. print "\n---------------------------------"
复制代码

作者: 沈小黑    时间: 2013-12-13 20:35
#从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)
   
作者: scz_000    时间: 2013-12-13 23:19
  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里输入中文时又出现乱码了,求先生指教
作者: fl0w    时间: 2013-12-15 00:35
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
复制代码

作者: h01m3s    时间: 2013-12-15 14:19
  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用法
作者: jox    时间: 2013-12-17 10:25
本帖最后由 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))
复制代码

作者: 阿聪    时间: 2013-12-17 20:17
我用random.sample(range(1,n),m)
分别测试了100,1000。sorted(set(li))排序看结果
没发现重复啊,这个方法不会产生重复的吧?求解答
作者: h01m3s    时间: 2013-12-18 13:25
阿聪 发表于 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.


引用官方文档,不会重复。
作者: 阿聪    时间: 2013-12-18 17:52
h01m3s 发表于 2013-12-18 13:25
引用官方文档,不会重复。

感谢!我原本以为只是从population 中随机抽样生成新序列。原来是不重复抽样
作者: wshqxin    时间: 2013-12-25 20:05
  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
复制代码

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

作者: crossin先生    时间: 2013-12-26 10:47
wshqxin 发表于 2013-12-25 20:14
这样定义怎么不对呢?
我想这样用

你是不是python3?3里面已经没有raw_input了
作者: crossin先生    时间: 2013-12-26 10:50
wshqxin 发表于 2013-12-25 20:14
这样定义怎么不对呢?
我想这样用

你需要把完整代码和控制台的输出都发上来,才能看出哪里错了。
光是这两个代码片段,看不出来
作者: Myk_cc    时间: 2013-12-26 14:05
冒个泡~

Screenshot_10.png (43.09 KB, 下载次数: 346)

Screenshot_10.png


作者: wshqxin    时间: 2013-12-26 19:35
crossin先生 发表于 2013-12-26 10:50
你需要把完整代码和控制台的输出都发上来,才能看出哪里错了。
光是这两个代码片段,看不出来 ...
  1. #coding:utf-8
  2. import random

  3. n = int(raw_input('输入最大数:'))
  4. print "你输入的最大的数是",n

  5. def a():
  6.         m = int(raw_input('输入随机出现多少个数'))

  7. a()
  8. print m

  9. if m > n:
  10.         print "你输入的随机数的个数大于你输入的最大数,请重新输入"
  11.         a()

  12. list_n = []
  13. for a in range(1,n+1):
  14.         list_n.append(a)

  15. #print list_n
  16. slice_m = random.sample(list_n,m)
  17. print slice_m
复制代码
是这个。我想用if语句来控制一下,如果m>n,就重新输入m
作者: crossin先生    时间: 2013-12-26 22:24
wshqxin 发表于 2013-12-26 19:35
是这个。我想用if语句来控制一下,如果m>n,就重新输入m

你不能在函数外面访问一个函数内部定义的变量,它们不是一个作用域的
作者: crossin先生    时间: 2013-12-26 22:24
wshqxin 发表于 2013-12-26 19:35
是这个。我想用if语句来控制一下,如果m>n,就重新输入m

你不能在函数外面访问一个函数内部定义的变量,它们不是一个作用域的
作者: wshqxin    时间: 2013-12-27 16:41
crossin先生 发表于 2013-12-26 22:24
你不能在函数外面访问一个函数内部定义的变量,它们不是一个作用域的

恩。。好了。把m全局化了。谢谢先生
  1. #coding:utf-8
  2. import random

  3. n = int(raw_input('输入最大数:'))
  4. print "你输入的最大的数是",n

  5. def a():
  6.         global m
  7.         m = int(raw_input('输入随机出现多少个数'))

  8. a()

  9. if m > n:
  10.         print "你输入的随机数的个数大于你输入的最大数,请重新输入"
  11.         a()

  12. list_n = []
  13. for a in range(1,n+1):
  14.         list_n.append(a)
  15. slice_m = random.sample(list_n,m)
  16. print slice_m
复制代码

作者: nemo    时间: 2014-1-1 17:55
本帖最后由 nemo 于 2014-1-1 18:03 编辑

import random
bingo=True
while bingo==True:
        print '请输入最大数字'
        n=raw_input()
        print '您需要几个数字'
        m=raw_input()
        if 1 <= int(m) <= int(n):
                def choice(n,m):
                        return sorted(random.sample([i for i in xrange(1,int(n)+1)], int(m)))
                break
        else:
                print"请确认'1<=m<=n'!"
               
print choice(n,m)

作者: creek    时间: 2014-6-23 23:56
  1. #!/usr/bin/env python
  2. #coding:cp936

  3. from random import randint

  4. print '*'*6+'从1~n中,随机取m个数'+'*'*6
  5. while(True):
  6.     n=int(raw_input('输入n\n'))
  7.     m=int(raw_input('输入m\n'))
  8.     result=[]
  9.     if m>n or m<1:
  10.         print '注意:1<=m<=n\n重新开始\n'
  11.     else:
  12.         i=1
  13.         while i<=m:
  14.             random=randint(1,n)
  15.             if random not in result:
  16.                 result.append(random)
  17.                 i+=1
  18.         print tuple(result)
  19.         break
复制代码

作者: Daryl    时间: 2014-7-10 21:02
  1. from random import randint
  2. print "请输入最大范围:"
  3. n = input()
  4. print "请输入取出数量"
  5. m = input()
  6. result = []
  7. if m <= 0:
  8.     print "输入有误"
  9. while m > 0:
  10.     result.append(randint(1, n))
  11.     m = m - 1
  12. print result;
复制代码

作者: toddlerya    时间: 2014-7-21 11:53
byron 发表于 2013-12-12 20:36

倒数第二行else中的m_n() 是做什么用的呢?去掉也没影响呀
作者: toddlerya    时间: 2014-7-21 12:50
#-*- coding: cp936 -*-
import random

print "从1~n中,随机取m个数。n1<=m<=n"

def ran():
    m = int(input("请输入你要得到的数字个数:"))
    n = int(input("请输入你需要的数字的上限:"))
    if 1 <= int(m) <= int(n):
        a = random.sample(range(1,n),m)
        print a
        
    else:
        print("~"*25)
        print("请确定 1<= m <= n?")
        print("~"*25)
        ran()
ran()
   

作者: UFO    时间: 2015-5-2 23:01
标题: 就会这么多,感觉好low~~~
本帖最后由 UFO 于 2015-5-2 23:05 编辑
  1. from random import randint
  2. n = int (input())
  3. m = int (input())
  4. a = 1
  5. while a <= m:
  6.     num = randint(1,n)
  7.     print (num)
  8.     a+=1
复制代码

作者: 十二君    时间: 2015-9-1 02:51
# -*- coding: cp936 -*-
import random

print('n选择为什么数?')
n = input()
print('从n中选几个数m?')
m = input()
lst=[]

if m>n or m<1:
    print('错了哦,1<=m<=n')
else:
    lst = random.sample(range(1,n+1),m)
    print lst

作者: accat    时间: 2015-9-15 23:41
import random

n=input('n:')
m=input('m:')
if 1<=m<=n:
   l= [random.randint(1,n) for i in range(0,m)]
   print l
else:
    print "ERRO"

作者: dreamlxt17    时间: 2015-10-5 10:49
toddlerya 发表于 2014-7-21 11:53
倒数第二行else中的m_n() 是做什么用的呢?去掉也没影响呀

如果输入错误的话,就会再次调用函数本身,开始新一轮输入。
作者: manhong2112    时间: 2016-1-16 11:36

  1. import random
  2. import sys

  3. o = []
  4. m = int(input("m = "))
  5. n = int(input("n = "))
  6. if 1 <= m <= n : sys.exit(1)
  7. while len(o) < n:
  8.   a = random.choice(range(1,m+1))
  9.   if a in o: continue
  10.   o.append(a)

  11. o.sort()
  12. print(o)
复制代码

作者: xqqxjnt1988    时间: 2016-2-2 16:02
crossin先生,请帮我看看代码
我第一次写代码,见笑了,请多批评,你们大家的批评就是我进步的动力,谢谢
#!/usr/bin/python
#coding=utf-8
#下面这个函数是从n个数里随机产生m个数
import random

def sort_m():
    try:
        n = raw_input("please input the total numbers:\t")
        m = raw_input("please int numbers you select:\t")
        msort= set()
        if (m.isdigit & n.isdigit) ==True:
            print "both are digits!OK!ready!"
        else:
            print"plese input digits!"
   

            
        if 0<int(m) & int(m)<int(n):
            mint= int(m)
            nint = int(n)
        else:
            print "wrong input"
            exit
        
        for i in range(0,mint,1):
            ran_int=random.randint(1,nint)
            msort.add(ran_int)
            print "now add this number:\t" , ran_int
        
        print"the final set is as following:\t" , msort
   
    except Exception as e:
        print "please input digits!Not String!"
        
    finally:
        print "END!"
   
if __name__ == '__main__':
    sort_m()
   
    #for i in (0,mint):则只会循环两次
    #isdigit()可以帮忙判断输入的字符是不是数字
作者: crossin先生    时间: 2016-2-2 22:58
xqqxjnt1988 发表于 2016-2-2 16:02
crossin先生,请帮我看看代码
我第一次写代码,见笑了,请多批评,你们大家的批评就是我进步的动力,谢谢
# ...

if (m.isdigit & n.isdigit) ==True
isdigit本身是个函数,你要调用函数,需要加括号
这个条件别这么写。&是按位与操作符。
所以要写成
  1. if m.isdigit() and n.isdigit():
复制代码
其他的条件也类似
作者: xqqxjnt1988    时间: 2016-2-3 09:04
crossin先生 发表于 2016-2-2 22:58
if (m.isdigit & n.isdigit) ==True
isdigit本身是个函数,你要调用函数,需要加括号
这个条件别这么写。 ...

谢谢先生:)我记下来了,感激
作者: fangweiren    时间: 2016-2-6 14:00
  1. #coding:utf-8
  2. import random
  3. print '***从n个数中随机选取m个数,确保1<m<n!***'
  4. n = int(raw_input('请输入n:'))
  5. m = int(raw_input('请输入m:'))
  6. lista = range(1,n)
  7. li = []
  8. for i in range(m):
  9.         x = random.choice(lista)
  10.         x_index = lista.index(x)
  11.         li.append(x)
  12.         lista.pop(x_index)
  13. print li
复制代码

作者: Suzy    时间: 2016-3-12 21:13
本帖最后由 Suzy 于 2016-3-12 21:14 编辑

是我理解能力有问题么?大家的答案都看不懂呢...
刚开始学习,老师请检查我的作业
========作业分割线=======
print " Press a number: n= "
n = input()

from random import randint
m = randint(1,n)

for i in range(0,m):
    x = randint(1,n)
    print x

print "End"
作者: crossin先生    时间: 2016-3-12 23:14
Suzy 发表于 2016-3-12 21:13
是我理解能力有问题么?大家的答案都看不懂呢...
刚开始学习,老师请检查我的作业
========作 ...

可以。不过你这个m不是用户指定,而是随机的。
另外随机的m个数会有重复
作者: ly_911004    时间: 2016-3-14 15:13
  1. # -*- coding: utf-8 -*-
  2. import random
  3. def choice(m,n):
  4.     if 1<= int(m) <= int(n):
  5.         return '红球:'+str(map(lambda x:'%02d'%x,sorted(random.sample(range(1, int(n)+1),int(m))))) +'\n篮球:'+'%02d'%random.randint(1,n/2)
  6.     else:
  7.         print 'm,n不符合要求'

  8. print choice(6,33)
复制代码

作者: oppend    时间: 2016-3-28 02:57
  1. # coding=utf-8
  2. # 从1~n中,随机取m个数。1<=m<=n
  3. # 随机取双色球号码
  4. # 红球1-33,兰球1-16,红球6个,兰球1个
  5. import random
  6. # 取号,共有属性和方法,1到n取数,取数次数
  7. class ballnum:
  8.     def __init__(self,num):
  9.         self.num=num

  10. class ballcho(ballnum):
  11.     def __init__(self,num,times):
  12.         ballnum.__init__(self,num)
  13.         self.times=times

  14.     def cho(self,times):
  15.         for i in range(times):
  16.             num=random.randint(1,self.num)
  17.             print num,

  18. red=ballcho(33,6)
  19. red.cho(6)
  20. blue=ballcho(16,1)
  21. blue.cho(1)
复制代码

作者: 番小茄    时间: 2016-4-8 11:09
import random

def double_balls(a,b):
    list_1=random.sample(range(1,a+1),b)
    print list_1

n=input('input n=')
m=input('input m<%d m=' % n)

double_balls(n,m)
作者: 渡俊    时间: 2016-4-20 20:14
TongShan 发表于 2013-12-13 10:39

精简 厉害
作者: 屹力马扎罗    时间: 2016-5-20 22:20
#-*-coding:utf8;-*-
#qpy:2
#qpy:console

print "This is console module"
from random import randint
def lol(n,m):
    a=[]
    b=0
    while b<m:
        while b<m:
            c=randint(1,n)
            a.append(c)
            b=b+1
        a=set(a)
        b=len(a)
        a=list(a)
    print(a)

n=input("请输入范围:1~")
m=input("需要取多少个整数:")
lol(n,m)


            
            
            
   


作者: 诡异    时间: 2016-5-25 22:22
# coding: utf-8
# Filename: randint.py
# 从1~n中,随机取m个数, 1 <= m <= n

from random import randint

limits = int(raw_input("随机数的上限是:"))
times = int(raw_input("抽取的次数:"))


class Guessing_game(object):

    def __init__(self, guessing_times, limit_num, lists):
        self.guessing_times = guessing_times
        self.limit_num = limit_num
        self.lists = lists

    def play(self):
        cnt = 1
        result = 'result = {\n'
        while self.guessing_times > 0:
            num = randint(0, self.limit_num)
            if num in self.lists:       # 删除重复的随机数
                num = randint(0, self.limit_num)
            else:
                if self.guessing_times != 1:
                    line = "    '第%r次抽取的数是': '%r',\n" % (cnt, num)
                    result += line
                    cnt += 1
                else:
                    line = "    '第%r次抽取的数是': '%r'\n" % (cnt, num)
                    result += line
                    cnt += 1
            self.lists.append(num)
            self.guessing_times -= 1
        self.lists = []
        cnt = 0
        result += "\n}"
        return result

    def file_saving(self, data):
        f = file("e:\Coding\Python\keng1\data.py", 'w')
        f.write(data)
        f.close()


game = Guessing_game(times, limits, [])
game.file_saving(game.play())

作者: D7Script    时间: 2016-6-5 23:36
  1. import random
  2. def rand(m,n):
  3.     if(1<=int(m)<=int(n)):
  4.         num = random.sample(range(n),m)
  5.         print(num)
  6.     else:
  7.         print("vale!")

  8. m = int(input("Mvalue:"))

  9. n = int(input("Nvalue:"))

  10. rand(m,n)
复制代码
这样子OK吗?
作者: crossin先生    时间: 2016-6-6 13:27
D7Script 发表于 2016-6-5 23:36
这样子OK吗?

ok

作者: 我叫别这样    时间: 2017-1-6 11:38
刚刚开始学Python 写了个双色球选号的
  1. from random import randint
  2. num_blue = randint(1,16)
  3. num=0
  4. result=''
  5. num_reds=[]
  6. while num<6:
  7.     num_red = randint(1,33)
  8.     if num_red in num_reds:
  9.        num_red = randint(1,33)
  10.     else:
  11.         num_reds.append(num_red)
  12.         result+=str(num_red)+','
  13.         num+=1
  14. print result+str(num_blue)
复制代码

作者: crossin先生    时间: 2017-1-6 20:44
我叫别这样 发表于 2017-1-6 11:38
刚刚开始学Python 写了个双色球选号的

哈哈,这个我也想过
作者: 凉爽兄    时间: 2017-1-7 18:39
import random

def randompick(n,m):
        return random.sample(xrange(1,n+1),m)


print 'please tell me n:'
n=input()
print 'please tell me m:'
m=input()
if (m<=n and m>=1)==False:
        print 'are you kidding me?'
else:
        result=randompick(n,m)
        print result
作者: kiknight    时间: 2017-1-13 10:05
本帖最后由 kiknight 于 2017-1-13 10:43 编辑

# -*- coding: cp936 -*-
from random import randint
n = input("请输入数据总个数 ")
m = input("请输入要随机取出的数据个数 ")
while n<m:
    print"上次输入不符合,请输入要随机取出的数据个数"
    m=input()
print '从1到%d中随机取出%d个数据为:'%(n,m)
for i in range(0,m):
    print randint(1,n)
   
   
作者: ponber    时间: 2017-1-18 19:58
from random import randint
print 'How many numbers do you want?'
y=input()
for i in range(0,y):
    x=randint(1,100)
    print x
作者: morpheus2222    时间: 2017-1-20 09:47
import random
got_result = False
while got_result == False:
    try:
        n = int(input("please give a range:"))
        m = int(input("how many numbers you want from the range:"))
        if 0<=m<=n:
            list = [i for i in range(1,n+1)]
            #print(list)

            result = []

            for num in range(0,m):
                random.shuffle(list)
                choose = list.pop()
                result.append(choose)
            result.sort()
            print(result)
            got_result = True
        else:
            print("please make sure your number is not greater than the range")

    except:
        print("please make sure you input integers")
作者: 月下    时间: 2017-1-22 19:18
本帖最后由 月下 于 2017-1-22 22:15 编辑
  1. from random import choice

  2. b = False
  3. while b == False:
  4.     m = int(input("你想抽取几个数?(不能小于1或大于你所选择的范围):\n"))
  5.     n = int(input("请选定最大值(需大于你想抽取的数字个数):\n"))
  6.     if 1 <= m and m < n:
  7.         break
  8.     else:
  9.         print ("输入错误,请重新输入!\n")
  10.         b == False          #设定报错循环
  11. result = []                 #储存
  12. times = 0                   #抽取个数

  13. while times != m:           #剔除重复数字
  14.     y = choice(range(1,n))
  15.     if y in result:
  16.         times - 1
  17.     else:
  18.         result.append(y)
  19.         times += 1
  20. print (result)
复制代码

作者: xpfdsg    时间: 2017-1-22 20:50
  1. from random import randint

  2. def choose(m,n):
  3.     result=[]
  4.     if m>=1 and m<=n:
  5.         for i in range(m):
  6.             result.append(randint(1,n+1))
  7.     else:
  8.         print '请输入一个不小于1,不大于%d的数'%n
  9.     return result
  10. n=input('请输入样本范围:')
  11. m=input('请输入样本数量:')
  12. sample=choose(m,n)
  13. print sample
复制代码

作者: a2010bbc2010    时间: 2017-2-16 19:52
本帖最后由 a2010bbc2010 于 2017-3-1 21:22 编辑

  1. 本帖最后由 a2010bbc2010 于 2017-2-16 19:55 编辑


  2. # -*- coding:UTF-8 -*-
  3. import random

  4. n=input('输入上限:')
  5. m=input('输入个数:')

  6. if 1<=m<=n:
  7.     data=[]
  8.     for i in range((m)):
  9.         data.append(random.randint(1,n))

  10.     print data
  11. else:print '数据输入有误。'
复制代码

作者: 江水滔滔    时间: 2017-2-16 23:41
a2010bbc2010 发表于 2017-2-16 19:52
# -*- coding:UTF-8 -*-
import random
  1. 在编辑窗口
  2. 有一个<>形状的按钮
  3. 点击它
  4. 就能上传代码
复制代码
  1. 或者
  2. 在你代码的两端
  3. 加上"[code]"标记
  4. 就能
  5. 把内容转化成代码格式
复制代码

作者: 梦萱    时间: 2017-2-21 16:58
import random
print 'please input a number that you want to choose from:n='
print 'please input a number that how many number you want to choose:m='
n=input()
m=input()
if m<=n:
    for i in range(1,m):
        s= int(random.random()*n)
        print s
else:
   print 'ERROR,m needs to be smaller than n'

作者: 南斗    时间: 2017-3-8 21:04
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import random

  4. n = int(raw_input("输入n:"))
  5. num_range = range(0, n+1)

  6. m = int(raw_input("输入m并符合1<=m<=n:"))
  7. b = True

  8. while b:

  9.     if m < 1 or m > n:
  10.         m = int(raw_input("输入的数字不符合1<=m<=n,请重新输入:"))
  11.     else:
  12.         random_num = random.sample(num_range, m)
  13.         print "最后得出的随机数:%s" % random_num
  14.         b = False
复制代码

作者: lzlz    时间: 2017-4-27 15:31
#-*-coding=utf-8-*-
from random import randint

n=int(raw_input('请输入n的值:'))
m=int(raw_input('请输入m的值:'))
list=[]
count=0
if 1<=m<=n:
    while count<m:
        num=randint(1,n)
        if num not in list:
            list.append(num)
            count+=1
    print list
else:
    print '请输入正确的数值'

作者: zhaozihang    时间: 2017-5-19 11:11
import random
m=input('m=')
n=input('n=')
for i in range (m):
     if 1<=m<=n:
          print random.choice(range(1,n))
     else:
          print 'format error. m must be less than or equal to n'
          break

来的晚吗?
作者: crossin先生    时间: 2017-5-19 23:34
zhaozihang 发表于 2017-5-19 11:11
import random
m=input('m=')
n=input('n=')

不晚

作者: qingri    时间: 2017-6-7 00:31
新手开始通关,
import random
print 'Input numbers m & n, 1<=m<=n '
m = input('m = ')
n  = input('n = ')
if n >=m>=1:
    random_numberlist = random.sample(range(1,n+1), m)
    random_numberlist.sort()
    print random_numberlist
else:
    print 'Error, check if n >=m>=1'

作者: lihw    时间: 2017-6-21 16:23
  1. import random
  2. n= int (input('最大数'))
  3. m = int (input('多少数'))
  4. if m<=n:
  5.     ken1= random.sample(range(n),m)
  6. else:
  7.     ken1= random.sample(range(n),n)
  8. print (ken1)
复制代码

作者: yinmm007    时间: 2017-7-8 16:31
# -*- coding: cp936 -*-
#随机取数
from random import randint
n = input('n=')
m = input('m=')
b = 0
if 1<=m<=n:
    while b < m:
        print (randint(1,n))
        b +=1
else:
    print 'check your data,make sure 1<=m<=n'

作者: zaizaicaocao    时间: 2017-7-27 21:15
from random import randint

m=int(input('please input how many number you need:'))
n=int(input('please input how end number you need'))

list1=[]
while len(list1)<m:
    list1.append(randint(1,n))
print(list1)

作者: wolfog    时间: 2017-8-17 18:26
# -*-coding:utf-8-*-
# 从m 个数字随机徐拿出n个数字
import random
import sys

def getRandomNumber(mm, nn):
    """
返回1到m之间的n个数字
    :param m:
    :param n:
    :return:
    """
    sourceList = range(1, mm + 1)
    print random.sample(sourceList, nn)

def inputM():
    """
输入m的值,并且对输入的m值进行判断
    """
    try:
        global m
        m = input("请输入m的值:")
        if m <= 2:
            print "请输入一个大于2的数字"
            sys.exit()
    except:
        print "请输入数字"
        sys.exit()

def inputN():
    """
输入n的值,并对n进行判断
    """
    try:
        global n
        n = input("请输入n的值:")
        if n < 1 or n >= m:
            print "n的取值范围只能大于等于1小于m"
            sys.exit()
    except:
        print "请输入数字"
        sys.exit()

inputM()
inputN()
getRandomNumber(m, n)




作者: layman    时间: 2017-8-20 15:03
刚开始入门 老师多指导~~

# -*- coding: cp936 -*-
import random
m=input('请输入最小值:')
n=input('请输入最大值:')
x=input('请输入数量:')
i=1
for i in range (1,x+1):
    num=random.randint(m,n)
    i=i+1
    print num
作者: jiang_mi    时间: 2017-8-21 14:00
import random
import re
n0=input('input n:')
m0=input('input m:')
mm=[]
if re.match(r'\d+',n0) and re.match(r'\d+',m0):
        n=int(n0)
        m=int(m0)
        if 1<=m<=n:
                while len(mm)<m:
                        a=random.randint(1,n)
                        if a in mm:
                                pass
                        else:
                                mm.append(a)
        else:
                print('wrong input,exit')
print(mm)

作者: wzqoo    时间: 2017-9-4 12:40
我也来贴个
def choice(n,m):
        list1=range(1,n+1)
        list1.reverse()
        list2=[]
        pos=1
        while len(list2)<m:
              pos=randint(1,n)
              num=list1[pos-1]
              if not(num in list2):
                 list2.append(num)
                 
        list2.sort()
        return list2
i=0
while i<10:   
     print choice(33,6)
     i+=1
     
作者: silen_lu    时间: 2017-9-18 14:08
import random

print '请输入两个数,符合n>m>=1的规则:'
m=input('请输入一个数m:')
n=input('请输入一个更大的数n:')
ln=[]
lm=[]
for ln_init in range(1,n+1):
    ln.append(ln_init)
    ln_init +=1
if n>=m>=1:
    lm=random.sample(ln,m)
    print lm,ln
else:
    print '是否符合规则n>=m>=1?'
作者: li_qiuming    时间: 2017-10-4 17:20
  1. # -*- coding:utf-8 -*-
  2. '''
  3. 题目:
  4. 从1~n中,随机取m个数。1 <= m <= n
  5. '''
  6. import random

  7. print 'list_n = [1,2,3,4,5,6,7,8,9,0]'
  8. print 'plz input the value of m(0<=m<=10):'
  9. m = input()
  10. list_n = [1,2,3,4,5,6,7,8,9,0]
  11. list_m = random.sample(list_n,m)

  12. print list_m
复制代码

作者: wwyy4ever    时间: 2018-2-22 10:33
本帖最后由 wwyy4ever 于 2018-2-22 10:55 编辑

老师,可以讲解一下return sorted(random.sample([i for i in xrange(1,int(n)+1)], int(m)))中括号里那部分内容吗?
改成return sorted(random.sample(range(1,int(n)+1), int(m)))可以吧
作者: crossin先生    时间: 2018-2-22 13:04
wwyy4ever 发表于 2018-2-22 10:33
老师,可以讲解一下return sorted(random.sample(, int(m)))中括号里那部分内容吗?
改成return sorted(ran ...

是的,可以。
不过你中间少半个括号
作者: 小可爱    时间: 2018-2-22 18:08
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from random import randint
n = int(input("请输入抽取上限n:"))
i = m = int(input("请输入抽取的次数m:"))
res=[]
while i:
    num=randint(1,n)
    res.append(num)
    i-=1
print ('从(1,%d)中随机抽取%d次的结果为:%s\n'%(n,m,res))

作者: 18629053510    时间: 2018-2-23 15:25
# coding uft-8

import random

m = int(raw_input("How many numbers do you want?"))
n = int(raw_input("1-?"))
i = random.sample(range(1, n+1), m)
print sorted(i)
作者: 刘友会    时间: 2018-3-30 10:01
本帖最后由 刘友会 于 2018-3-30 10:06 编辑

# -*- coding: UTF-8 -*-
# 超级大乐透
import random

def quShu(m, n):
    lst = range(1, n+1)
    count = 0
    newLst = []
    while count < m:
        randomNum = random.choice(lst)
        if randomNum not in newLst:
            newLst.append(randomNum)
            count += 1
    return newLst

qianQu = sorted(quShu(5, 35))
houQu = sorted(quShu(2, 12))

for i in qianQu:
    print i,
print '|',
for j in houQu:
    print j,
作者: coolqing    时间: 2018-4-18 15:56
from random import randint    #from 模块名 import 方法名
m=input()
n=input()
for i in range(0,m):
    if 1<=m<=n:
        num = randint(1, n)
        print num
else:
    print 'mistake'
作者: 小砂    时间: 2018-5-3 18:05
from random import randint
n=int(raw_input('从哪要'))
m=int(raw_input('要多少个'))
i=1
c=[]

def chachong(x,y):#防止重复选取
    a=randint(1,y)
    if x==[]:
        #print a,'\n'
        return a
        
    elif x!=[]:
        for l in x:
            if a==l:
                #print c,a,'\n'
                chachong(x,y) #如果与已有数字重复,重新选取
        return a
            

while i<=m:
    b=chachong(c,n)
    c.append(b)
    i+=1

想请教一下为什么取出来的数字仍然会有重复
作者: crossin先生    时间: 2018-5-3 23:19
小砂 发表于 2018-5-3 18:05
from random import randint
n=int(raw_input('从哪要'))
m=int(raw_input('要多少个'))

不要随便用递归函数,而且你也没用对。里面 chachong 并没有返回结果
作者: 小砂    时间: 2018-5-7 11:06
crossin先生 发表于 2018-5-3 23:19
不要随便用递归函数,而且你也没用对。里面 chachong 并没有返回结果

了解了,谢谢
作者: coolqing    时间: 2018-5-8 18:47
请问老师,每日一坑没有选出最佳答案的吗?
作者: crossin先生    时间: 2018-5-9 00:01
coolqing 发表于 2018-5-8 18:47
请问老师,每日一坑没有选出最佳答案的吗?

没有,开放式的。一般下一次里面会选一个来讲解,但并不是说别的方法不好
作者: luckygirl    时间: 2018-6-5 20:23
#!usr/bin/env python3

import random

def TheRandom(n,m):
    TheSet = []

    for i in range(m):
        t = random.randint(1, n)
        if t not in TheSet:
            TheSet.append(t)

    print(TheSet)


TheRandom(1000,99)
作者: irfan    时间: 2018-6-10 11:50
import random

n = int(input('please enter a number:'))
m = int(input("How many numbers do you want?"))
def wow(n, m):
    if m <= n and m >= 1:
        list = []
        i = 0
        while i < m:
            list.append(random.randint(1, n))
            i += 1
        print(list)
    else:
        m = int(input("The number should <=n and >=1"))
        wow(n, m)

wow(n, m)

作者: 金胜利    时间: 2018-6-13 14:00
import random
def ball():
   m=eval(input("需要输出几个数"))
   n=eval(input("输出数的最大数是多少?"))
   if 1<=m <=n:
       for i in range(1,m+1):
         print(random.randint(1,n))
   else:
        print("输出最大数必须大于等于输出的数字个数,请重新输入!")
        ball()
ball()

作者: 花花啊    时间: 2018-8-24 14:15
#coding:utf-8

import random
def choice(n,m):

    if 1<=int(m)<=int(n):
        return sorted(random.sample(xrange(1,int(n)+1),int(m)))
    else:
        return"请确认‘1<m<n'!"

print choice(100,5)

作者: Lisa    时间: 2019-9-4 17:13
#coding=utf-8
from random import randint
n=int(input("请输入整数n:\n"))
m=int(input("请输入整数m(1<=m<=n):\n"))
def test_One():
    if 1<=m<=n:
        for i in range(0,m):
         print(randint(1,n))

    else:
        print("输入的m,n值不符合条件")
test_One()
作者: Lisa    时间: 2019-9-4 17:16
Lisa 发表于 2019-9-4 17:13
#coding=utf-8
from random import randint
n=int(input("请输入整数n:\n"))

未考虑重复问题,代码需补充优化
作者: FERRYMAN    时间: 2021-2-10 21:36
写了一下午和一晚上,总算把坑都给填完了

这个程序可以解决重复出现数字的问题

希望老师能看看,更欢迎提出建议和意见

谢谢啦
  1. import random

  2. #从1~n中随机取m个数
  3. print('从1~n中随机取m个数')
  4. print('tips:m,n都必须为正整数且1≤m≤n')
  5. global m
  6. global n
  7. m = float(input('enter m:'))
  8. n = float(input('enter n:'))
  9. #此处暂时不转换为整数形式以防止输入内容不符合条件
  10. #下面这个while循环可以使m,n最终均为符合条件的值
  11. while (m<1) or (n<1) or (n<m) or (int(m % 1) is not 0) or (int(n % 1) is not 0):
  12.     print('注意!m,n都必须为正整数且1≤m≤n!')
  13.     m = float(input('enter m again:'))
  14.     n = float(input('enter n again:'))
  15.     if (1 <= m <= n) and (int(m % 1) is 0) and (int(n % 1) is 0):
  16.         break
  17. m = int(m)
  18. n = int(n)
  19. result_list = []
  20. for i in range(m):
  21.     result_list.append(random.randint(1, n))
  22. # print(result_list)
  23. #下面这个循环可以使结果中的数不重复
  24. while len(set(result_list)) < m:
  25.     daiti = []
  26.     for a in set(result_list):
  27.         daiti.append(a)
  28.     result_list = daiti
  29.     result_list.append(random.randint(1, n))
  30. print('\n结果为:')
  31. print(result_list)
复制代码

作者: FERRYMAN    时间: 2021-2-10 21:38
FERRYMAN 发表于 2021-2-10 21:36
写了一下午和一晚上,总算把坑都给填完了

这个程序可以解决重复出现数字的问题

老师可以仔细讲讲“集合”这个东西吗?

写程序的时候用了set(),然后就被绕晕了




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5