1
tittle: Python中的 random 函数
date: 2015-11-17 18:35:24
categories: python
toc: true

Python中的 random 函数

如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍。

random.random()用于生成0-1之内的浮点数

用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数

1
n: a <= n <= b。如果 a <b, 则 b <= n <= a。
print random.uniform(10, 20)  
print random.uniform(20, 10)  
#---- 
#18.7356606526  
#12.5798298022  
random.randint

用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数下限必须小于上限。

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

随机整数:

1
>>>import random

>>> random.randint(0,99)
21

随机选取0到100间的偶数:

1
>>> import random

>>> random.randrange(0, 101, 2)

42

随机浮点数:

1
>>> import random

>>> random.random() 

0.85415370477785668

>>> random.uniform(1, 10)

5.4221167969800881

随机字符:

1
>>> import random

>>> random.choice('abcdefg&#%^*f')

'd'

多个字符中选取特定数量的字符:

1
>>> import random

random.sample('abcdefghij',3) 

['a', 'd', 'b']

多个字符中选取特定数量的字符组成新字符串:

1
>>> import random

>>> import string

>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r

eplace(" ","")

'fih'

随机选取字符串:

1
>>> import random

>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )

'lemon'

博客搭建记录 — Hexo && Github

环境配置

配置 Hexo

  • 安装 Hexo

    1
    $ npm install -g hexo-cli
  • 搭建博客

    1
    $ mkdir dirname #新建文件夹, 名字位置自己选
    $ cd dirname
    $ hexo init
    $ npm install
    $ hexo generate #简写$ hexo g
    $ hexo server #简写 $ hexo s, 可通过http://localhost:4000/查看效果
  • 配置 Hexo

    • 修改 deploy

      1
      $ open _config.yml
      #修改最后面 deploy 选项
      deploy:
        type: git
        repo: git@github.com:yourname/yourname.github.io.git
        branch: master
  • 发布

    1
    $ hexo generate
    $ hexo deploy #简写$ hexo d, 到此为止可以打开yourname.github.io 访问了

更换主题

  • 更改配置

    1
    修改hexo根目录下的 _config.yml: 
    theme: yilia
  • 更新

    1
    $ cd themes/yilia
    $ git pull
  • 不起作用时尝试

    1
    $ hexo clean
    $ hexo g
    $ hexo d

配置

更多配置正在研究中, 随时更新.

更多命令参考 Hexo 官方文档

gitbook自动生成pdf中文字体错乱问题解决办法

用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, 经常出现字体不一致的现象, 影响阅读, 强迫症更是难以忍受.

下面针对这一问题提供简单的解决办法: 本地命令行生成 pdf 文件. 当然这种方法有一定局限性, 你需要找到托管在 github 对应的源码仓库且转换过程中不出错. (由于水平有限未能解决在线生成的pdf中文字体错乱问题, 见谅. 也就是说网站自动生成的 pdf 依旧字体错乱, 但是本地生成的pdf文件是没有这个问题的 orz… 如果是 gitbook 上的写作者的话可以本地生成 pdf 上传至网盘提供下载)

Gitbook 项目介绍

GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书,GitBook 并非关于 Git 的教程。

Gitbook 安装(以下环境是在 OS X 中进行的, 其他环境记得替换命令)

  • 通过 NPM 安装 Gitbook
1
$ npm install gitbook-cli -g
  • 查看 Gitbook 版本
1
$ gitbook versions
1
$ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin

Gitbook 本地生成文档

1
$ git clone https://github.com/Aaaaaashu/Mac-dev-setup

注意是电子书托管的仓库地址而不是电子书的地址, 有的作者会直接给出, 没有给出的话通过作者 id 在 github 上查找, 注意替换地址. 还有一些没能找到仓库的, 可以去其他网站找一下 pdf.

  • 进入文件夹
1
$ cd Mac-dev-setup
  • 生成 HTML 文件(非必要)
1
$ gitbook serve

默认在当前目录下生成包含 html 网页名为 _book 的文件夹, 并启动端口为4000的预览服务器, 可通过 http://localhost:4000 预览.

  • 生成 pdf 文件
1
$ gitbook pdf

默认在当前目录下生成名为 book.pdf 的文件, 类似的可生成 epub 和 mobi 文件.

这样字体正确的 pdf 文件就生成了, 对比直接从 gitbook 下载的 pdf, 体积变大了.

常见错误

本地命令经常会卡在最后一步, 经常见的如 permission denied, 即没有权限, 记得在前面添加 sudo 或直接启用 admin.

你还可能碰到许多诸如下载失败的错误, 多数情况下是墙引起的, 还请自备翻墙技巧哈.

其他的错误有插件加载失败, 错误信息里有命令提示gitbook install.

还有就是 svg 转换 png 的错误, 可以找到对应的文件删除对应语句. 如果 svg 图片很多的话, 靠删除不能解决问题. 看了些讨论也没能解决, 如果你有解决办法, 请联系我.

写在最后

网上的一些教程由于时间太早, 有些命令已经舍弃了, 如 gitbook 的安装命令, 添加 pdf 依赖等, 还请以官方文档为准.

本文旨在解决从 gitbook 下载的 pdf 中文字体错乱问题, 更多的 gitbook 使用技巧及如何构建电子书可以参考GitBook 简明教程, 和参阅官方文档或自行 Google. 希望能对你有所帮助.

给 gitbook 提交了 issue 还没有回复.

Gitbook地址 || Gitbook项目地址 || 中文文档

参考: Gitbook 使用入门

Allow XtraFinder work in OS X 10.11

自从 OS X 更新到 10.11, 乱七八糟糟心的问题层出不穷, 取消了部分手势, Xcode 旧版本新建文件目录问题…….

用 Mac 也有段时间了, Finder 总体评价不尽人意. 文件排序设置来设置去总是没有在 Windows 上舒服, 令人不解的是竟然不支持通配符, 此处略去不表.

下面解决 XtraFinder 在10.11中不能使用的问题, 其实是官网给出的方案…

由于10.11增加了 SIP , 导致 Finder 增强工具 XtraFinder 闪退, 官网的解决方案是关闭 SIP 的 debug 模式. 顺便解决了 ProxyChains 在10.11无法使用的问题, 至于网上的彻底关闭 SIP 的教程, 我的看法是: 不要理他们.

  • 步骤:
    • 重启 Mac, 按住 Command 键和 R 键
    • 点选实用工具菜单中的终端, 输入$ csrutil enable --without debug
    • 重启, 搞定

更多 SIP 信息, Apple SIP/Rootless安全技术介绍+测试分析及关闭方法

Python 关键字, 符号

关键字

KEYWORD DESCRIPTION EXAMPLE
and 逻辑与 True and False == False
as with-as语句的一部分 with X as Y: pass
assert 声明 assert False, "Error!"
break 停止整个循环 while True: break
class 定义一个类 class Person(object)
continue 停止这一次循环,但继续下一次循环 while True: continuev
def 定义一个函数 def X(): pass
del 从字典中删除 del X[Y]
elif Else if 条件 if: X; elif: Y; else: J
else Else 条件 if: X; elif: Y; else: J
except 如果捕获异常,执行该代码块 except ValueError, e: print e
exec 将字符串作为Python代码执行 exec 'print "hello"'
finally 不管是否有异常,finally代码块都执行 finally: pass
for for循环 for X in Y: pass
from 从某一模块中引入特定部分 import X from Y
global 定义一个全局变量 global X
if If 条件 if: X; elif: Y; else: J
import 引入一个模块到当前模块 import os
in for循环的一部分/ 测试X in Y. for X in Y: pass / 1 in [1] == True
is 类似==,判断相等 1 is 1 == True
lambda 创建一个无名函数 s = lambda y: y ** y; s(3)
not 逻辑非 not True == False
or 逻辑或 True or False == True
pass 该代码块为空 def empty(): pass
print 打印一个字符串 print 'this string'
raise 代码出错时,抛出一个异常 raise ValueError("No")
return 退出函数并返回一个返回值 def X(): return Y
try 尝试代签代码块,有异常则进入except代码块 try: pass
while While循环 while X: pass
with 一个变量的别名 with X as Y: pass
yield 暂停, 返回给调用者 def X(): yield Y; X().next()

数据类型

针对每一种数据类型,都举出一些例子来,例如针对string,你可以举出一些字符串,针对 number,你可以举出一些数字。

TYPE DESCRIPTION EXAMPLE
True True 布尔值. True or False == True
False False 布尔值. False and True == False
None 表示 “nothing” 或者”no value”. x = None
strings 字符串,储存文本信息 x = "hello"
numbers 储存整数 i = 100
floats 储存小数 i = 10.389
lists 储存某种东西的列表 j = [1,2,3,4]
dicts 储存某些东西的键值对 e = {'x': 1, 'y': 2}

字符串转义序列

对于字符串转义序列,你需要在字符串中应用它们,确认自己清楚地知道它们的功能。

ESCAPE DESCRIPTION
\ 斜线
\’ 单引号
\” 双引号
\a Bell
\b 退格
\f Formfeed
\n 换行
\r Carriage
\t Tab键
\v 垂直的tab

字符串格式化

ESCAPE DESCRIPTION EXAMPLE
%d 格式化整数 (不包含浮点数). "%d" % 45 == '45'
%i 与%d相同 "%i" % 45 == '45'
%o 8进制数字 "%o" % 1000 == '1750'
%u 负数 "%u" % -1000 == '-1000'
%x 小写的十六进制数字 "%x" % 1000 == '3e8'
%X 大写的十六进制数字 "%X" % 1000 == '3E8'
%e 小写 ‘e’的指数标记 "%e" % 1000 == '1.000000e+03'
%E 大写 ‘e’的指数标记 "%E" % 1000 == '1.000000E+03'
%f 浮点数 "%f" % 10.34 == '10.340000'
%F 与%f相同 "%F" % 10.34 == '10.340000'
%g %f 或者 %e中较短的一个 "%g" % 10.34 == '10.34'
%G %F 或者 %E中较短的一个 "%G" % 10.34 == '10.34'
%c 字符格式化 "%c" % 34 == '"'
%r 类型格式化 "%r" % int == "<type 'int'>"
%s 字符串格式 "%s there" % 'hi' == 'hi there'
%% 表示百分号% "%g%%" % 10.34 == '10.34%'

操作符

OPERATOR DESCRIPTION EXAMPLE
+ 2 + 4 == 6
- 2 - 4 == -2
* 2 * 4 == 8
** 幂乘 2 ** 4 == 16
/ 2 / 4.0 == 0.5
// 整除,得到除法的商。 2 // 4.0 == 0.0
% 模除,返回除法的余数。 2 % 4 == 2
< 小于 4 < 4 == False
> 大于 4 > 4 == False
<= 小于等于 4 <= 4 == True
>= 大于等于 4 >= 4 == True
== 等于,比较操作对象是否相等。 4 == 5 == False
!= 不等于 4 != 5 == True
<> 不等于 4 <> 5 == True
( ) 括号 len('hi') == 2
[ ] 列表括号 [1,3,4]
{ } 字典括号 {'x': 5, 'y': 10}
@ 装饰符 @classmethod
, 逗号 range(0, 10)
: 冒号 def X():
. Dot self.x = 10
= 赋值等于 x = 10
; 分号 print "hi"; print "there"
+= 加等于 x = 1; x += 2
-= 减等于 x = 1; x -= 2
*= 乘等于 x = 1; x *= 2
/= 除等于 x = 1; x /= 2
//= 整除等于 x = 1; x //= 2
%= 模除等于 x = 1; x %= 2
**= 幂乘等于 x = 1; x **= 2

来自笨方法学 python, 适用于 python 2.x 版本