学委之前写了
这篇是下篇。
数据类型转换
这一块比较分散,主要分为下面三类:
- 字符串转数字,对象,容器
- 数字转容器,字符等
- 数字进制转换等
学委准备了下面的代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 5:59 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : data_conversion.py.py # @Project : hello x = "100" print("str to int(10)=%s" % int(x, 10)) print("str to int(2)=%s" % int(x, 2)) print("str to int(16)=%s" % int(x, 16)) print("float x=%s" % float(x)) y = 100 print("complex y=%s" % complex(y, 0)) data = str(y) print("y to str: %s" % data) text = "hello" print("str to repr: %s" % repr(text)) text = "hello, world" print("str to repr: %s" % repr(text)) result = eval("print('hello')") print("eval result : %s" % result) result = eval("1+1") print("eval result : %s" % result) result = tuple("hello") print("str to tuple: %s" % str(result)) langs = tuple(['Python', 'Java', 'Scala', 'JavaScript']) print("str to tuple: %s" % str(langs)) result = tuple("('hello', 'world')") print("str to tuple: %s" % str(result)) data = list("hello data") print("str to list : %s" % data) data = set("hello data") data.add('b') print("str to set : %s" % data) data = dict([("name", "levin"), ("langs", langs)]) print("tuples to dict : %s" % data) data = frozenset("hello data") print("str to frozen set: %s" % data) # data += "b" # char = unichr(97) # unichr: no longer exist char = chr(97) print("int to char: %s" % char) int_value = ord(char) print("char to int: %s" % int_value) number = 16 print("number to 十六进制: %s" % hex(number)) print("number to 八进制: %s" % oct(number))
运行效果:
7种操作演示
python内支持下面7种类型的操作。
- 数学运算操作符
- 比较操作符
- 赋值操作符
- 按位操作符
- 逻辑操作符
- 成员识别操作符
- 身份识别操作符
基础数学运算演示
这种非常常见,比如进行两个数字运算,或者数学运算表达式。直接复制下面的代码运行:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : user_input.py.py # @Project : hello x = 3 y = 333 print("x %s, y %s" % (x, y)) print("x+y= %s" % (x + y)) print("x-y= %s" % (x - y)) print("x*y= %s" % (x * y)) print("y/x= %s" % (y / x)) print("y//x= %s" % (y // x)) print("5/2= %s" % (5 / 2)) print("5//2= %s" % (5 // 2)) print("y%" + ("x= %s" % (y % x))) print("x%" + ("y= %s" % (x % y))) print("y**x= %s" % (y ** x))
这里我们看到python进行指数型运算的支持非常好,两个‘*’就能进行指数运算了。
下面看看运行结果:
比较操作符
比较操作非常直白,就是对比左右两个数字/对象,判断是否满足给定比较关系(大于,小于,等于等等)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello print("1 > 2 ? %s" % (1 > 2)) print("1 < 2 ? %s" % (1 < 2)) print("1 == 2 ? %s" % (1 == 2)) print("1 == 2 ? %s" % (1 != 2)) print("\"1\" == \"1\" ? %s" % ("1" == "1")) print("1 >= 2 ? %s" % (1 >= 2)) print("1 <= 2 ? %s" % (1 <= 2))
直接复制运行结果:
赋值操作符
赋值操作符,顾名思义就是,一边操作一边赋值。
非常简单,无法就是比前面的运算操作多了一次赋值,代码写起来简化了一些。
y **= 3 #不实用赋值操作符, y = y ** 3
我们看看下面的代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello x = 3 print("x %s" % x) x += 3 print("+=3 %s" % x) x -= 3 print("-=3 %s" % x) x *= 3 print("*=3 %s" % x) x **= 3 print("**=3 %s" % x) x /= 3 print("/=3 %s" % x) x = 3 x //= 3 print("//=3 %s" % x) x = 10 x %= 3 print("%"+"= %s" % x)
运行结果:
位操作符
在计算机内数据都是二进制存储的。
比如数字8(十进制),存储起来是:0000…0000100(就是30位的其他位都是0,除了第三位是1,表示2的三次方)。
所以左移动一位就是乘以2,或者右移动除以2。
我们看看下面的代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello import sys data = 8 # 二进制:1000 print("与运算:8 & 1 ? %s" % (data & 1)) # 1000 & 0001 = 0 print("或运算:8 | 1 ? %s" % (data | 1)) # 1000 | 0001 = 1001 print("异或运算:8 ^ 2 ? %s" % (data ^ 2)) # 1000 ^ 0010 = 1010 print("异或运算:8 ^ 8 ? %s" % (data ^ data)) # 1000 ^ 1000 = 1010 print("按位取反运算:~8 ? %s" % (~data)) #~x = -x - 1 print("按位取反运算:~ -8 ? %s" % (~ -data)) #~ -x = -x - 1 print("原数的二进制格式输出: %s" % bin(data & 0xFFFFFFFF)) print("取反之后的二进制格式输出: %s" % bin(~data & 0xFFFFFFFF)) print("左移位运算: 8 <<2 ? %s" % (data << 2)) print("右移位运算: 8 <<2 ? %s" % (data >> 2)) print("8 & 1 ? %s" % (data & 1)) print("8 & 2 ? %s" % (data & 2)) print("8 & 8 ? %s" % (data & 8))
运行结果如下:
& 表示对应位同时为1则标记结果对应位置为1;
| 表示只要对应位置为1则标记结果对应位置为1。
^ 异或则对应位置同为0/1则标记结果对应位置为0,其他情况为1.
取反,0变成1,1变成0
逻辑操作符
这个非常简单,记住这三个:and, or, not。
用法则是,and / or 需要连结两个表达式。not 则可以在任何表达式前面。
我们直接看代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello expr = 1 > 2 print("expr : ",expr) print("not expr: ", not expr) print("and : ", expr and (2 > 3)) print("or : ", expr or (2 > 3)) print("or : ", expr or (4 > 3))
直接看结果:
成员识别操作符
这个也非常简单,只需要记住两个:in 和 not in。
也就是针对容器类的比如list/tuple/字符串类型的数据,我们使用in或者not in判断某个值是否为该容器的元素。
看看代码
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello data = [1, 2, 3] print("1 in list %s: %s" % (data, 1 in data)) print("4 not in list %s: %s" % (data, 4 not in data)) data = (1, 2) print("1 in tuple %s : %s" % (data, 1 in data)) print("4 not in tuple %s : %s" % (data, 4 not in data)) data = "hello world" print("\"hello\" in string %s : %s" % (data, "hello" in data)) print("\"hello2\" not in string %s : %s" % (data, "hello2" not in data))
查看运行效果:
身份识别操作符
这个也非常简单,只需要记住两个:is 和 is not。
主要用来判断两个变量是否同个
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator.py # @Project : hello data = [1, 2, 3] print("data is data %s: %s" % (data, data is data)) other = "hello" print("%s is data %s: %s" % (other, data, other is data)) print("%s is not data %s: %s" % (other, data, other is not data)) print("\"222\" is data %s: %s" % (data, "222" is data)) print("\"222\" is \"222\" : %s" % ("222" is "222"))
运行效果:
更多补充:is 在python里面就是判断两个对象是否同个id的(也就是id(object)函数的结果,object的内存地址)。
If条件分支
我们写代码的时候有时候并不想从头到尾执行。
前面介绍了各种操作符,它们都可以用来制作表达式。
然后给条件分支作为判断执行的依据。
如果需要有条件有选择的运行代码,在python里面可以这样:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : ifelse.py # @Project : hello data = 1 if data == 1: print("data is 1") else: print("data is not 1") data = 5 if data == 1: print("data is 1") elif data < 10: print("data < 10") else: print("data >= 10")
我们先看看运行效果:
这里我们再回顾抽取如下:
if 条件表达式1: 这里放满足表达式1情况下运行的代码 elif 条件表达式2: 如果第二种情况的判断,运行这里的代码 else: 其他情况,运行这里的代码
这里的elif 分支,和else分支也是可以省略的,最简化的如下:
if 条件表达式1: 这里放满足表达式1情况下运行的代码
循环重复执行For-Loop
循环的用途,就是让程序不停(或者限定次数)运行指定代码。
比如,让你编程实现1 + 2 + … + 100,求和1逐步累加到100的和。
当然可以编程 1 + 2 + 3 一支写到100,当时如果要求计算到10000呢?
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : forloop.py # @Project : hello start = 1 n = 100 sum = 0 while start <= n: sum = sum + start start += 1 print("sum of (1,...,%s) is %s" % (n, sum))
运行结果如下:
读者可以改代码中的n变量的值,如果要累加到10000,那么直接修改n为10000,运行代码即可算出。
跳出/终止循环
比如还是上面的求和计算,想要超过1000的数字就不再累加。
怎么做到?python里面给出了”break“这个关键字。
下面看看代码怎么实现:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : forloop.py # @Project : hello start = 1 n = 10000 sum = 0 while start <= n: sum = sum + start if start >= 1000: break start += 1 print("start is %s" % start) print("sum of (1,...,%s) is %s" % (start, sum))
运行代码我们可以发现运行到start=1000的时候累加完,程序就输出累加结果了。
当然python里面还有continue和pass关键字。
这里不作展示了,简单说明一下:
continue:会让循环继续运行,但是会跳过continue
后面的代码,直到不满足continue的条件或者循环结束。
pass:则是不限制于循环内使用,我们定义函数也能用pass。循环内使用pass
循环也能用for来编写,下面把上面几个关键字一并展示了。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : forloop.py # @Project : hello for letter in 'Love Python': if letter == ' ': print("空格") continue if letter == 'h': pass print('This is pass block') print('Current Letter :', letter) print("雷学委的forloop程序结束!")
直接看一下运行效果:
最后思考一下
结合前篇
可以运行一下下面的代码,然后猜测一下这些操作符的优先顺序。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/4 9:49 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : operator_ordering.py # @Project : hello a = 1 b = 2 c = 3 d = 4 result = (+a + b) * c / d print("result = %s " % result)
可以算一下这个表达式的结果。
这里揭晓。
下面表格把操作符从高到低执行级别。