1、python 随机数生成

Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。

1.1 random.random

random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0

1.2 random.uniform

random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。

print random.uniform ( 10 , 20 )
print random.uniform ( 20 , 10 ) #---- 结果(不同机器上的结果不一样)
#18.7356606526
#12.5798298022
print random.uniform ( 10 , 20 )
print random.uniform ( 20 , 10 ) #---- 结果(不同机器上的结果不一样)
#18.7356606526
#12.5798298022

1.3 random.randint

random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

print random.randint ( 12 , 20 ) #生成的随机数n: 12 <= n <= 20
print random.randint ( 20 , 20 ) #结果永远是20
#print random.randint(20, 10) #该语句是错误的。下限必须小于上限。
print random.randint ( 12 , 20 ) #生成的随机数n: 12 <= n <= 20
print random.randint ( 20 , 20 ) #结果永远是20
#print random.randint(20, 10) #该语句是错误的。下限必须小于上限。

1.4 random.randrange

random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。

random.randrange ( 10 , 100 , 2 )
random.randrange ( 10 , 100 , 2 )

在结果上与 random.choice(range(10, 100, 2) 等效。

1.5 random.choice

random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章 。下面是使用choice的一些例子:

print random.choice ( "学习Python" )
print random.choice ( [ "JGood" , "is" , "a" , "handsome" , "boy" ] )
print random.choice ( ( "Tuple" , "List" , "Dict" ) )
print random.choice ( "学习Python" )
print random.choice ( [ "JGood" , "is" , "a" , "handsome" , "boy" ] )
print random.choice ( ( "Tuple" , "List" , "Dict" ) )

1.6 random.shuffle

random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。如:

p = [ "Python" , "is" , "powerful" , "simple" , "and so on..." ]
random.shuffle ( p )
print p
#---- 结果(不同机器上的结果可能不一样。)
#['powerful', 'simple', 'is', 'Python', 'and so on...']
list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
slice = random.sample ( list , 5 ) #从list中随机获取5个元素,作为一个片断返回
print slice
print list #原有序列并没有改变。
p = [ "Python" , "is" , "powerful" , "simple" , "and so on..." ]
random.shuffle ( p )
print p
#---- 结果(不同机器上的结果可能不一样。)
#['powerful', 'simple', 'is', 'Python', 'and so on...']
list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
slice = random.sample ( list , 5 ) #从list中随机获取5个元素,作为一个片断返回
print slice
print list #原有序列并没有改变。

上面这些方法是random模块中最常用的,在Python手册中,还介绍其他的方法。感兴趣的朋友可以通过查询Python手册了解更详细的信息。

最后咱们用上面介绍的随机函数来简单的模拟下黑客帝国的随机字符滚屏效果 :)

#coding:utf-8
#
#简单的几句Python语句,模拟滚动的Matrix屏保
#
# 1. 打开Windows命令行(运行-》输入“cmd”然后回车)
# 2. 打开命令行属性设置,设置背景为黑色,前景为绿色
# 3. 执行这个脚本,就可以看到类似电影《骇客帝国》中的经典滚屏了 – 不过是反着的。。。
#
#呵呵,无聊之作。。。Alt+Enter全屏观看效果更好

import random, string
a = " " * 100 + string.printable
while True:
    print a[random.randint(0,len(a)-1)],
#coding:utf-8
#
#简单的几句Python语句,模拟滚动的Matrix屏保
#
# 1. 打开Windows命令行(运行-》输入“cmd”然后回车)
# 2. 打开命令行属性设置,设置背景为黑色,前景为绿色
# 3. 执行这个脚本,就可以看到类似电影《骇客帝国》中的经典滚屏了 – 不过是反着的。。。
#
#呵呵,无聊之作。。。Alt+Enter全屏观看效果更好

import random, string
a = " " * 100 + string.printable
while True:
    print a[random.randint(0,len(a)-1)],

2、Python sort/sorted函数详解

2.1 sort函数

sort函数是序列的内部函数

2.1.1 函数原型:

L.sort ( cmp = None , key = None , reverse = False )
L.sort ( cmp = None , key = None , reverse = False )

2.1.2 函数作用:

它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序

2.1.3 参数说明:

(1) cmp参数

cmp接受一个函数,拿整形举例,形式为:

def f ( a , b ) :
     return a - b
def f ( a , b ) :
     return a - b

如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了

(2) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下

def f ( a ) :
     return len ( a )
def f ( a ) :
     return len ( a )

key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序

(3) reverse参数
接受False 或者True 表示是否逆序

2.1.4 sort举例:

(1)按照元素长度排序

L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f ( x ) :
     return len ( x )
sort ( key = f )
print L
L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f ( x ) :
     return len ( x )
sort ( key = f )
print L

输出:

[ { 1 : 9 } , { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } ]
[ { 1 : 9 } , { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } ]

(2)按照每个字典元素里面key为1的元素的值排序

L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f2 ( a , b ) :
     return a [ 1 ] - b [ 1 ]
L.sort ( cmp = f2 )
print L
L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f2 ( a , b ) :
     return a [ 1 ] - b [ 1 ]
L.sort ( cmp = f2 )
print L

输出:

[ { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 3 , 6 : 3 } , { 1 : 5 , 3 : 4 } , { 1 : 9 } ]
[ { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 3 , 6 : 3 } , { 1 : 5 , 3 : 4 } , { 1 : 9 } ]

或者例如:http_details.sort(cmp=lambda x,y: cmp(x[3], y[3])) # 按 key 为 3 的元素的值进行排序:sort by size

2.2 sorted函数

sorted 函数是内建函数,他接受一个序列,返回有序的副本。

它与sort的唯一区别就是会返回副本。


3、Referer:

http://codingso.sinaapp.com/archives/38

http://codingso.sinaapp.com/archives/40

http://www.2maomao.com/blog/several-python-scripts-wrote-recently/