正式的Python專欄第15篇,同學站住,別錯過這個從0開始的文章!
學委之前寫了
多圖速成Python基礎語法上篇【0.5萬字建議收藏】
這篇是下篇,
資料型別轉換
這一塊比較分散,主要分為下面三類:
- 字串轉數字,物件,容器
- 數字轉容器,字符等
- 數字進制轉換等
學委準備了下面的代碼:
#!/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)
可以算一下這個運算式的結果,
這里揭曉,
下面表格把運算子從高到低執行級別,
| 運算子 | 描述 |
|---|---|
| ** | 指數操作最高 |
| ~ + - | 取反操作,一元加運算,和一元減運算 |
| * / % // | 乘法,除法,取余數,除法向下取整 |
| + - | 加法 和 減法 |
| >> << | 左右位移運算子 |
| & | 與運算子 |
| ^ | | 位運算子 |
| < > <= >= | 比較運算子 |
| < > == != | 等于運算子 |
| = %= /= //= -= += *= **= | 賦值運算子 |
| is is not | 身份識別運算子 |
| in not in | 成員運算子 |
| not and or | 邏輯運算子 |
對了,喜歡Python的朋友,請關注學習 Python基礎專欄 or Python入門到精通大專欄
持續學習持續開發,我是雷學委!
編程很有趣,關鍵是把技術搞透徹講明白,
歡迎關注,還有盡情點贊收藏!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305983.html
標籤:python
