python2 学习笔记之 表达式

6次阅读
没有评论

共计 4027 个字符,预计需要花费 11 分钟才能阅读完成。

1. 赋值 就是将一个数字、字符串等赋值给一个变量

  1. 简单赋值
x = 1
  1. 多重赋值
# 将 1 赋给 x,2 赋给 y
x,y = 1,2
#以下表达式同上
x,y = (1,2)
x,y = [1,2]
#-- 分割线 --
#将 h 赋给 x,w 赋给 y
x,y = 'h','w'
#将 b 赋给 x,j 赋给 y
x,y = 'bj'
#将 bj 赋值给 x 和 y
x = y = 'bj'
  1. +=
x = 1
#x = 2
x +=1 

2. 输入

2.1 raw_input 原始输入, 不进行转换

x = raw_input(" 请输入你的名字 ")
#请输入你的名字 liuser
print('hello %s' % (x))
#hello liuser
x = raw_input("100*100 = ?")
# 100*100 = ?100*100
x
#输出 x 的时候原样输出,不做计算.
'100*100'
>>> 

2.2 input 输入的内容会做运算

x = input("100*100 = ?")
100*100 = ?100*100
>>> x
#已经做了计算 100*100
10000
input(" 输入你的名字 ")
#输入你的名字 liuser
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'liuser' is not defined
#liuser 这个变量不存在,input 的输入跟在 python 中的表达、语句是一样的。

3 输出

先说一下 python3 和 2 的区别,3 的话 python 是一个函数,如果使用 print "hello",会报错。python2 中 print 是一个语句, 重点是看下 python2

3.1 普通输出

# 普通输出
print "hello"

3.2 格式化符号

# 格式化符号输出,下面输出结果为:"hello world" %s 表示这个位置是一个字符串 后面的括号为实际的值
print "hello %s" % ("world")
#格式化输出, 下面语句将输出:"hello liuser , welcome use python "
print "hello {0} , welcome use {1} " . format('liuser','python')
#也可以使用下面语句
print "hello {a} , welcome use {b} " . format(a = 'liuser',b = 'python')

4 条件语句

4.1 if else 语句
if 语法

# 如果表达式 xxx 为 true,则执行 statements1
if xxx:
    statements1
#如果表达式 yyy 为 true,并且 xxx 为 false,则执行 statements2
elif yyy:
    statements2
#如果上述表达式都不满足,则执行下面表达式
else
    statements3
#一个栗子, 输出结果为 "x=10"
x = 10
if x > 10 :
    print "x > 10"
elif x < 10:
    print "x < 10"
else :
    print "x = 10"

5 逻辑表达式, 顺序上 not > and > or

5.1 not 取反

x = True
#输出 x
x
#x=True
True
#取反
not x
#x=False
False
>>> 

5.2 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。

x,y,z = [1,0,4]
#返回 0,第一个假值
x and y
#返回 4,两个都为真,返回右边的值(最后的值)x and z

5.3 or 从左到有计算表达式,返回第一个为真的值。

x,y,z = [1,0,4]
# 返回 x,因为 x 为真
x or y
#返回 z,z 为真
y or z

5.4 三元表达式,if 的缩写形式

x,y = [3,5]
#这句话表示,如果 x > y, 则 a = x,否则,x = y
a = x  if x > y  else y

6 循环语句

6.1 while/else

基本语法

# 如果 xxx 为真,则一直执行 while 循环
while xxx:
    statements
    #如果要跳出循环,if yyy:
        #直接跳出整个循环
        break
        #跳出当前循环
        continue
举个例子 1
x = 10
while x > 0 :
    print('x > 0, 当前 x 为 % s' % (x))
    x = x-1
else:
    print(" 循环结束,当前 x 为 % s" % (x))
x > 0, 当前 x 为 10
x > 0, 当前 x 为 9
x > 0, 当前 x 为 8
x > 0, 当前 x 为 7
x > 0, 当前 x 为 6
x > 0, 当前 x 为 5
x > 0, 当前 x 为 4
x > 0, 当前 x 为 3
x > 0, 当前 x 为 2
x > 0, 当前 x 为 1
循环结束,当前 x 为 0
举个例子 2
x = 10
#死循环
while True:
    print('x > 0, 当前 x 为 % s' % (x))
    x = x-1
    #通过此处的条件中断循环
    if(x<=0):
        break
else:
    #此处不会执行,因为是手动停,并不是 while 循环的条件为 False
    print(" 循环结束,当前 x 为 % s" % (x))
举个例子 3,判断 10 以内的偶数
x = 10
while x > 0:
    if(x % 2 == 0):
        print('打印偶数 %d' % (x))
    x = x-1
举个例子 4,判断一个数是不是质数(素数)#coding:utf-8
number = input(" 请输入一个数字 ")
#差不多是一个数的一半
half   = number // 2
flag = False
while(half>1):
    if(number % half ==0):
    flag = True
        print " 不是质数,可以被 % s 除 " % (half)
    half = half -1
else :
    if(flag == False):
        print("%s 是质数 " % (number))

6.2 for/else 循环

用法

#o 表示字符串  元组 列表 字典等
for x in o:
    #do something1
    if(False):
        #跳出和上面是一样的
        break
else:
    #do something2
举个小栗子:
for x in [1,2,3,4,5,6]:
    print "x = %s" % (x)
#输入 x=1 x=2..... x=6
再举一个小栗子,循环字典,并保存到文件
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import codecs
file = codecs.open('for.txt','w','utf-8')
dict = {'name':u'得青','age':'20','sex':'1','address':'北京'}
for key in dict:
    print >> file ,key,"=>",dict[key]
file.close()

7 列表解析和异常

7.1 列表解析
例:去除列表中重复的元素

L1 = ['a','b','c','d','b','a']
L2 = []
#这句的执行顺序是 for i in L1 , 然后判断 if not i in L2 , 也就是 i 是否在 L2 中,如果不在则 L2.append(i)
[L2.append(i) for i in L1  if not i  in L2]
print L2
>>> ['a', 'b', 'c', 'd']
等同于:
>>> for i in L1:
...     if(i not in L2):
...         L2.append(i)
...
>>> L2
['a', 'b', 'c', 'd']
>>> 

例 2:生成器, 算出 10 以内偶数的平方

# 会产生一个生成器 <generator object <genexpr> at 0x1058deaa0>
iter = (i ** 2 for i in range(10) if i%2 ==0)
#然后迭代遍历一下
for i in iter:
    print i

7.2 异常

7.1 常见异常

#i 未定义
print i
#会产生一个 NameError
>>> NameError: name 'n' is not defined
#i 为整型,访问下标会产生 TypeError
i = 1
i[1]
#list 只有一个元素,下表为 0,访问 1 越界,会产生 IndexError
list = [1]
list[2]

7.2 抛出异常 raise

# 上面可知,访问一个未定义的变量会产生 NameError,详细信息是 " name 's' is not defined", 我们也抛出这个异常,并修改异常信息
raise NameError(" 抛出异常 ")
#结果为
NameError: 抛出异常

7.3 异常拦截
异常会终端操作,导致一些未知的清空,我们可以使用 except 捕捉到异常,并处理

try:
    #访问一个不存在的 x,产生 NameError 异常
    print x
    #拦截 NameError 异常,使用 Exception 拦截所有异常
except NameError,e:
    #此处也可以 print e,e 保存着错误信息
    print " 发生异常 " 

7.4 完整的异常 demo

try:
    raise NameError(" 抛出一个异常 ")
#拦截异常
except NameError,e:
#打印错误信息
    print e
#不管是否有异常都会执行 finally
finally:
    print " 结束 "

8 习题

8.1 猜数字
除了猜数字,还有两个问题,
第一个是,input 如果接受到一个未定义字符串,会发生异常。
第二个是,如果在 input 中直接输入 rand_number 会直接判对。

#coding:utf-8
import random
#产生随机数字
rand_number     =   random.randint(0,100)
count = 6
while count > 0:
    try:
        input_number    =   raw_input(" 请输出你要猜的数字 ")
        input_number    =   int(input_number)
    except ValueError ,e:
        print " 请输入有效的数字 "
        break
    if(input_number == rand_number):
        #如果猜对了,则跳出循环
        print " 恭喜你猜对了,数字就是 % s" % (rand_number)
        break
    elif(input_number < rand_number):
            print " 数太小了 "
    elif(input_number > rand_number):
            print " 数太大了 "
    count = count - 1
else:
    print " 很抱歉,超时!"
    print " 正确答案是 % s" % (rand_number)

其他作业都不太难,就全略过了。

正文完
 0
admin
版权声明:本站原创文章,由 admin 于2017-09-06发表,共计4027字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码