• python小练习


    python小练习

    摘自think in python

    问题描述:

    ​ 如果你的班级上有23个学生, 2个学生生日相同的概率是多少? 你可以通过随机产生23个生日,并检查匹配来估算概率。 提示:你可以使用 random 模块中的 randint 函 数来生成随机生日。

    前提知识:

    1. range()内置函数

      range函数用法

      函数语法

      range(start, stop[, step])
      >>>range(10)        # 从 0 开始到 10
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> range(1, 11)     # 从 1 开始到 11
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>> range(0, 30, 5)  # 步长为 5
      [0, 5, 10, 15, 20, 25]
      >>> range(0, 10, 3)  # 步长为 3
      [0, 3, 6, 9]
      >>> range(0, -10, -1) # 负数
      [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
      >>> range(0)
      []
      >>> range(1, 0)
      []
      

    参数说明:

    • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
    • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
    1. random()函数

      描述:random() 方法返回随机生成的一个实数,它在[0,1)范围内。

      语法:

      import random
      
      random.random()
      #!/usr/bin/python
      # -*- coding: UTF-8 -*-
       
      import random
       
      # 生成第一个随机数
      print "random() : ", random.random()
       
      # 生成第二个随机数
      print "random() : ", random.random()
      

    注意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

    参数:无

    返回值:返回随机生成的一个实数,它在[0,1)范围内。

    random常见的函数:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import random
    
    print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数  
    print( random.random() )             # 产生 0 到 1 之间的随机浮点数
    print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
    print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
    print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数
    
    a=[1,3,5,6,7]                # 将序列a中的元素顺序打乱
    random.shuffle(a)
    print(a)
    

    python随机生成字符串、随机数

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import random
    import string
    
    # 随机整数:
    print random.randint(1,50)
    
    # 随机选取0到100间的偶数:
    print random.randrange(0, 101, 2)
    
    # 随机浮点数:
    print random.random()
    print random.uniform(1, 10)
    
    # 随机字符:
    print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')
    
    # 多个字符中生成指定数量的随机字符:
    print random.sample('zyxwvutsrqponmlkjihgfedcba',5)
    
    # 从a-zA-Z0-9生成指定数量的随机字符:
    ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
    print ran_str
    
    # 多个字符中选取指定数量的字符组成新字符串:
    print ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))
    
    # 随机选取字符串:
    print random.choice(['剪刀', '石头', '布'])
    
    # 打乱排序
    items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    print random.shuffle(items)
    

    代码:

    # 如果你的班级上有23个学生, 2个学生生日相同的概率是多少?
    # 你可以通过随机产生23个生日,并检查匹配来估算概率。
    # 提示:你可以使用 random 模块中的 randint 函 数来生成随机生日。
    from __future__ import print_function, division
    import random
    
    
    def has_duplicates(t):
        # 拷贝一份
        s = t[:]
        s.sort()
    
        # 检查是否相等
        for i in range(len(s) - 1):
            if s[i] == s[i + 1]:
                return True
        return False
    
    
    def random_bdays(n):
        """
        返回一个1-365天中的任一一天
        :param n:
        :return:
        """
        # 创建列表
        t = []
        for i in range(n):
            bday = random.randint(1, 365)
            t.append(bday)
        return t
    
    
    def count_matches(num_students, num_simulations):
        """
        产生一个生日和重复的样例
        :param num_students:
        :param num_simulations: 模拟的人数
        :return: int
        """
        count = 0
        for i in range(num_simulations):
            t = random_bdays(num_students)
            if has_duplicates(t):
                count += 1
        return count
    
    
    def main():
        """
        init
        :return:
        """
        num_students = 23
        num_simulations = 1000
        count = count_matches(num_students, num_simulations)
    
        print('After %d simulations' % num_simulations)
        print('With %d students ' % num_students)
        print('there were %d simulations with at least one match' % count)
    
    
    if __name__ == '__main__':
        main()
    
    博客网站 https://yamon.top 个人网站 https://yamon.top/resume GitHub网站 https://github.com/yamonc 欢迎前来访问
  • 相关阅读:
    Win10怎么设置虚拟内存?
    树莓派 —— USB 摄像头简单测试 (拍照 & 视频)
    如何设置树莓派 VNC 的分辨率
    树莓派 VNC Viewer 远程桌面配置教程
    数据库开发——MySQL——数据的增删改查
    数据库开发——MySQL——foreign key
    数据库开发——MySQL——primary key
    一种关闭按钮
    oracle下 启动subversion命令 及 oracle相关服务启动备忘
    table内 获取同一行 其他列的value
  • 原文地址:https://www.cnblogs.com/chenyameng/p/12629486.html
Copyright © 2020-2023  润新知