python小练习
Posted Coder,Not hair
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python小练习相关的知识,希望对你有一定的参考价值。
python小练习
问题描述:
? 如果你的班级上有23个学生, 2个学生生日相同的概率是多少? 你可以通过随机产生23个生日,并检查匹配来估算概率。 提示:你可以使用 random
模块中的 randint
函 数来生成随机生日。
前提知识:
-
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)
-
描述: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()
以上是关于python小练习的主要内容,如果未能解决你的问题,请参考以下文章