基础(变量&操作符)



1. 变量

命名规则:变量名必须是大小写英文、数字和_的组合,且不能用数字开头。避免使用keywords,以下是keywords列表

>>> import keyword
>>> print keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

PS:不能使用数字开头是为了避免系统混淆(和int型的混淆)

变量实质:变量其实就是内存地址

>>> a = "various a"
>>> b = a
>>> print('a address:',id(a),' b address',id(b))
('a address:', 140651413012032, ' b address', 140651413012032)

变量赋值:赋值号”=”

# 普通变量
>>> twelve = 12
>>> thirtyfour = 34
>>> print 'twelve:',twelve,'thirtyfour:',thirtyfour
twelve: 12 thirtyfour: 34

# 变量赋值
>>> one,two = 1,2
>>> print 'one:',one,'two:',two
one: 1 two: 2

# 变量交换
>>> one,two = two,one
>>> print 'one:',one,'two:',two
one: 2 two: 1

# 赋值空变量
>>> job = None
>>> print job
None

2. 数据类型

基本类型:整数、浮点数、字符串、布尔值、空值

PS:python还可以创建列表、数组和字典等多种数据类型,还可以自定义数据类型

2.1 数字number

2.1.1 整数integer

>>> a=10
>>> print(type(a),a)
(<type 'int'>, 10)

** 2.1.2 浮点数float**

>>> a=10.0
>>> print(type(a),a)
(<type 'float'>, 10.0)

2.1.3 强制转换整数int()

>>> a=int(10.1)
>>> print(type(a),a)
(<type 'int'>, 10)

2.1.4 强制转换浮点数float()

>>> a=float(10)
>>> print(type(a),a)
(<type 'float'>, 10.0)

2.1.5 int的范围

>>> print type(int_max),"int_max:",int_max,"\n",type(int_more),"int_more:",int_more
<type 'int'> int_max: 9223372036854775807
<type 'long'> int_more: 9223372036854775808
>>> int_more
9223372036854775808L        # <-----  L是长整型的标识

2.1.6float的范围

>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
# 科学计数法解释
>>> 2e+3
2000.0
>>> 1e-1
0.1

2.2 字符串string

2.2.1 单双引号字符串

>>> s='This is a string'
>>> print(s)
This is a string
>>> s="This is a string"
>>> print(s)
This is a string

2.2.2 三引号字符串(可换行)

>>> s='''
... This
... is
... A string
... '''
>>> print(s)
                             <------        #这是一个空行
This
is
A string

2.2.3 三引号字符串(用\来转义换行符,使第一行空行消失)

>>> s='''\
... This
... is
... A string
... '''
>>> print(s)
This                             <------        #空行没有了
is
A string

2.2.4 换行符\n

>>> s='This is \na string'
>>> print(s)
This is
a string

2.2.5 如何转义\n

>>> s='This is \\na string'   <------   #用'\'来转义
>>> print(s)
This is \na string
>>> s=r'This is \na string' <------   #用'r'来转义整个字符串的特殊符号
>>> print(s)
This is \na string

2.2.6 占位符\s

老方式

>>> a='Hello'
>>> b='This is a string,%s' %a
>>> print(b)
This is a string,Hello

新方式

>>> a='Hello'
>>> s='This is a string,{}'.format(a)
>>> print(s)
this is a string,Hello

2.2.7 编码

#Python默认采用ascii编码,而中文编码不再ascii编码能够表示的范围之内
>>> sys.getdefaultencoding()
'ascii'

3. 布尔值

3.1 赋值

>>> running = True
>>> while running:
...     print "good"
...     break
...
good

3.2 判断

>>> 1 == 1.0
True
>>> 1 == 2
False

4. 空值

4.1 赋值

>>> job = None
>>> print job
None
  • PS:区分数据类型,会节省内存的使用(不同的数据类型分配不同的内存容量)
  • PS:区分数据类型,会分离不同的针对数据类型的操作

5. 各类型操作方法

5.1 number操作符号

+-*/ 地板除//%

>>> 5 + 3 - 3 / 5           # 运算顺序,除法是优先于加减的
8 
>>> (5 + 3 - 3) / 5         # 用()来使运算过程清晰化
1

>>> 5/6                     # v2.x版本里整形之间除法得到的结果也是整形,python3里面会改善这个
0
>>> 5.0 / 6                 # 浮点型与整形计算会得到浮点型
0.8333333333333334
>>> float(5) / 6            # float函数
0.8333333333333334

>>> 5 % 6                   # 模也是取余数,余数是5
5
>>> 6 % 5
1

>>> 5.0 / 2                 # 来看下除法和地板除的区别
2.5
>>> 5.0 // 2
2.0
>>> import math             # math模块里的floor函数和//是同样的功效
>>> math.floor(5.0/2)
2.0

5.2 位操作

&:按位与; |:按位或;^:按位异或;~:取反;<<:左移;>>:右移作

‘3’的二进制是0011; ‘6’的二进制是0110

>>> 3 & 6
2             # '&'与操作结果:'2'的二进制是0010(同时为1,则为1,其他为0)
>>> 3 | 6
7             # '|'或操作结果:'7'的二进制是0111(只要有一个是1,则为1,其他为0)
>>> 3 ^ 6
5             # '^'异或操作结果:'5'的二进制是0101(只有一个是1,才为1,其他为0)

取反

>>> ~6
-7
# [十进制6 > 二进制0110 > 补码00110>] 取反11001 [补码10111 > 二进制-0111 > 十进制-7]
>>> ~3
-4
# [十进制3 > 二进制0011 > 补码00011>] 取反11100 [补码10100 > 二进制-0100 > 十进制-4]
>>> ~-8
7
# [十进制-8 > 二进制1000 > 补码11000>] 取反00111 [补码00111 > 二进制0111 > 十进制7]
# 内存中数字以补码的形式保存
# 正数的补码和反码都是本身
# 负数的补码是符号位不变,其余各位取反,末尾加1;反码是符号位不变,其余各位取反

字符位移

In [3]: t = 'abcd'

In [4]: r = ''

In [5]: for i in t:
   ...:     r += chr(ord(i) << 1)
   ...: print r
   ...:
????

In [6]: new_t = ''

In [7]: for i in r:
   ...:     new_t += chr(ord(i) >> 1)
   ...: print new_t
   ...:
abcd

5.3 string操作

>>> "string".upper()
'STRING'
>>> "STRING".lower()
'string'

6. 变量泄漏

6.1 for的变量泄漏

>>> i = 5
>>> for i in range(10):
...     print i
...
0
1
2
3
4
5
6
7
8
9
>>> i
9        # i变成了9

6.2 while的变量泄漏

>>> i = 9
>>> while i in range(11):
...     i += 1
...     print i
...
10
11
>>> i
11

7. 课后练习

7.1 写个程序,接受用户输入数字,并进行校验,非数字给出错误提示,然后重新等待用户输入。

#!/usr/bin/python
#Filename:2907_if_num.py
''' aim to check user's input, if num yes, else no, retry pls. '''

while True:
    try:
        input_user = int(raw_input('Input a number : '))
        print 'the number is %d'% input_user
        break
    except ValueError:
        print 'what you input is not a number!'
else:
    print 'Done'

7.2 根据用户输入数字,输出从0到该数字之间所有的素数。(只能被1和自身整除的数为素数)

#!/usr/bin/python
#Filename:2907_if_prime.py
''' aim to find all prime from 0 to the number user give. '''

while True:
    try:
        input_user = int(raw_input('Input a number : '))
        print '==========start========'
        num_div = input_user // 2 + 1
        for num_find in range(2,input_user + 1):
            count_div = 0
            for i in range(2,num_div):
                result_div = float(num_find) / i
                result_div_int = num_find / i
                #print "num:",num_find,'-',i,'-',result_div,'-',result_div_int
                if result_div == result_div_int and num_find != i:
                    count_div = 0
                    continue
                else:
                    count_div += 1
                #print count_div
            if len(range(2,num_div)) == count_div:
                print "prime : %d" % num_find
        break
    except ValueError:
        print 'what you input is not a number!'
print '==========Done========'

7.3 回顾

课后题:

  1. 写个程序,接受用户输入数字,并进行校验,非数字给出错误提示,然后重新等待用户输入。
  2. 根据用户输入数字,输出从0到该数字之间所有的素数。(只能被1和自身整除的数为素数)
while True:

    try:
        input_user = int(raw_input('Input a number : '))
    except ValueError:
        print 'what you input is not a number!'
        continue

    print '==========start========'
    num_div = input_user // 2 + 1
    for num_find in range(2,input_user + 1):
        is_prime = False
        for i in range(2,num_div):
            if num_find % i == 0 and num_find != i:
                is_prime = False
                break
            else:
                is_prime = True
        if is_prime:
            print "prime : %d" % num_find
    break
print '==========Done========'

变量命名规则主流方式:

  • 匈牙利命名:开头用变量类型的缩写,其余用变量的英文或缩写,单词第一个字母大写 For example: long lSum = 0; #“l”是类型的缩写;
  • 小驼峰式:(little camel-case) 第一个单词首字母小写,后面其他单词首字母大写 For example: string firstName = string.Empty;
  • 大驼峰式:(big camel-case) 每个单词的第一个字母都大写 For example:string FirstName = string.Empty;

但是,python倾向于下划线分割的方式来命名变量(For example:is_prime = True)