為什么編程語言中要有類型
類型有以下幾個(gè)重要角色:
- 對(duì)機(jī)器而言,類型描述了內(nèi)存中的電荷是怎么解釋的。
- 對(duì)編譯器或者解釋器而言,類型可以協(xié)助確保上面那些電荷、字節(jié)在程序的運(yùn)行中始終如一地被理解。
- 對(duì)程序員而言,類型可以幫助他們命名、組織概念,幫助編纂文檔,支持交互式編輯環(huán)境等。
以上觀點(diǎn)是 Edwin Brady 在《Type-driven Development with Idris》中的說法。
一、數(shù)據(jù)類型與數(shù)據(jù)轉(zhuǎn)換
1. 數(shù)據(jù)類型
1.1 整形
任何僅含數(shù)字的序列在 Python 中都被認(rèn)為是整型
>>> a = 0
>>> b = 100
>>> c = -2
>>> d = 0x50
>>> 0b0101
5
>>> type(0b0101)
<class 'int'>
進(jìn)制在 Python 中的表示形式
>>> 11 # 十進(jìn)制
>>> 0b01011 # 二進(jìn)制
>>> 0o13 # 八進(jìn)制
>>> 0xb # 十六進(jìn)制
1.2浮點(diǎn)型
帶小數(shù)點(diǎn)的數(shù)字, 就是平常我們說的小數(shù)。
0.1
-0.7
1.3字符串類型
s1 = "www.qfedu.com"
s2 = 'yangge'
print (
"""
hello
word
"""
)
----result------------
hello
word
1.4布爾類型
布爾值只有兩個(gè)
-
True表示真 -
False表示假
True
False
1 == True
0 == False
------------典型案例--------------------------
a= False
b = 0
a == b
True //即使 a = b 他們兩個(gè)id也不相同
id(0)
1945857024
id (False)
1945366720
2.數(shù)據(jù)類型之間的轉(zhuǎn)換
2.1 把其他類型轉(zhuǎn)換為整型
# 轉(zhuǎn)換
>>> int(0.1)
0
>>> int(0.9)
0
int 不能對(duì)字符串類型表示的浮點(diǎn)數(shù)進(jìn)行轉(zhuǎn)換
In [52]: int('123.9')
--------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-52-843b2aecee10> in <module>()
----> 1 int('123.9')
ValueError: invalid literal for int() with base 10: '123.9'
2.2 把其他類型轉(zhuǎn)換為浮點(diǎn)型
# 轉(zhuǎn)換
>>> float(1)
1.0
>>> float('1')
1.0
>>> float('-1')
-1.0
>>> float(-1)
-1.0
>>> float('1.3')
1.3
2.3 把其他類型轉(zhuǎn)換為字符串
>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str(True)
'True'
>>> str(False)
'False'
>>>
2.4 把其他類型轉(zhuǎn)換為布爾型

三、擴(kuò)展進(jìn)制運(yùn)算


四、運(yùn)算符
1. 基本算術(shù)運(yùn)算符
n = 1 + 100
print(n)
print(100 / 4)
print(100 // 4) #除數(shù)取整
print(2 ** 10) #冪數(shù)相乘
print(10 % 3) #取余數(shù)
// 累加 累乘 累除 等等
n = 0
n +=1
n *=3
print(n)
2運(yùn)算的判斷
2.1 值判斷

2.2 邏輯判斷和成員判斷

典型事例:
n1 = 100
n2 = 100
s1 = 'hello'
s2 = 'hello'
b = n1 == n2 and s1 != s2 //并判斷
print(b)
b = n1 == n2 or s1 == s2 //或判斷
print(b)
//成員判斷
s = 'hello'
print('h' in s )
print('lo' in s)
print('hle' in s )
//not的使用:判斷一個(gè)變量是否為真
r1 = True
r2 =False
if r1:
print('ok')
if not r1:
print('ok') //不正確非輸出
if not r2:
print('ok')
2.3 鏈?zhǔn)脚袛?/h4>
image
3. “假” 在各種數(shù)據(jù)類型中的表示
image
五、流程控制語句
1. if 判斷語句


基本的語法格式:
if 條件語句: # 注意這里必須以英文的冒號(hào)結(jié)束
條件語句為真時(shí),執(zhí)行的語句
n = input("輸入數(shù)字>>:")
n = int(n) # input 接收到的數(shù)據(jù),都是字符串類型
if n == 5:
print('相等')
n = input("輸入數(shù)字>>:")
n = int(n)
if n == 5:
print('相等')
else: # else 后邊必須有英文的冒號(hào)
print('No')
n = input("輸入數(shù)字>>:")
# 必須輸入數(shù)字來測(cè)試
n = int(n)
if not n:
print("空值")
elif n == 5:
print('ok')
elif n > 5:
print('大了')
else:
print('小了')
2. if嵌套語句
n = input("輸入數(shù)字>>:")
if n.isdigit():
f_n = int(n)
if f_n == 5:
print('ok')
elif f_n > 5:
print('大了')
else:
print('小了')
else:
print('請(qǐng)輸入數(shù)字')
典型案例展示:嵌套語句
n = input("星期日你有空嗎?")
if n == "yes":
inp = input("帶身份證了嗎?")
if inp == 'yes':
print("去如家 app")
else:
print("去我家")
else:
print('out')
3. while循環(huán)
方法一:
while True:
n = input("輸入數(shù)字>>:")
n = int(n)
if n == 5:
print('相等')
break
elif n > 5:
print('大了')
else:
print('小了')
方法二:
c =7 //whille 賦值判斷
while c <10:
c +=1
print(c)
n = input("輸入數(shù)字>>:")
n = int(n)
if n == 5:
print('相等')
break
elif n > 5:
print('大了')
else:
print('小了')
4. 迭代
- 什么是迭代
? 迭代 是重復(fù)反饋過程的活動(dòng),其目的通常是為了接近并到達(dá)所需的目標(biāo)或結(jié)果。
? 每一次對(duì)過程的重復(fù)被稱為一次“迭代”。
- for 循環(huán)(英語:for loop)
? 是一種編程語言的迭代陳述,能夠讓程式碼反復(fù)的執(zhí)行。
? 它跟其他的循環(huán),如while循環(huán),最大的不同,是它擁有一個(gè)循環(huán)計(jì)數(shù)器。
? 這使得for循環(huán)能夠知道在迭代過程中的執(zhí)行順序,記住上次被循環(huán)元素的位置。
for i in 'hello world':
print(i)
range(n)
產(chǎn)生一個(gè)可被循環(huán)的整數(shù)序列,默認(rèn)序列的元素從 零 開始
產(chǎn)生的元素?cái)?shù)量是 n 個(gè)
案例一:
for i in range(5):
print(i)
案例二:
for i in range(1,11):
print('玫瑰:',i)
break (只能跳出最近的循環(huán)或者迭代)和 continue
for i in range(0, 10):
print(i)
if i < 3:
inp_num = int(input(">>:").strip())
# inp_num = int(inp_num)
if inp_num == 15:
print('You get it')
break
elif inp_num > 15:
print("高了")
else:
print("低了")
else:
print("Game over")
break
for i in range(2, 10, 2):
print("循環(huán)到", i)
if i == 4:
continue //只終端這一條后續(xù)繼續(xù)執(zhí)行
print(i)
if i == 6:
break
range(開始索引號(hào):結(jié)束索引號(hào):步長(zhǎng))
其道理和切片一樣
擴(kuò)展知識(shí)
for … else
?1. 當(dāng) for 循環(huán)體正常執(zhí)行完畢時(shí),再執(zhí)行一下 else 后面的代碼
?2. 當(dāng) 執(zhí)行了 break 后,就不再執(zhí)行 else 后面的代碼了
for i in range(2):
if i == 10:
print('get it')
n = i
break
else:
print("Nothing")
6. 猜數(shù)游戲
要求:
- 提示用戶輸入一個(gè)數(shù)字 inp = input()
- 判斷用戶輸入的值是否等于 18 == inp
- 允許用戶嘗試 3 次
- 假如 3 次機(jī)會(huì)都沒有猜對(duì),就再次提示用戶是否繼續(xù)
- 用戶輸出
y,就再給 3 次機(jī)會(huì)。 輸入n則退出游戲
n = 0
while n < 3:
bef_n = n
n += 1
# 1. 提示用戶輸入一個(gè)數(shù)字 inp = input()
num = input("輸入數(shù)字:")
# 2. 判斷用戶輸入的值是否等于 18 == inp
if not num.isdigit():
print("請(qǐng)輸入數(shù)字")
n = bef_n
continue
num = int(num)
if num == 18:
print("猜對(duì)了")
elif num > 18:
print("大了")
else:
print("小了")
# 3. 允許用戶嘗試 3 次
# 4. 假如 3 次機(jī)會(huì)都沒有猜對(duì),就再次提示用戶是否繼續(xù)
if n == 3:
while True:
inp = input("是否繼續(xù),[y:繼續(xù)游戲, n:退出游戲]")
if inp == 'y':
n = 0
break
elif inp == 'n':
exit('退出游戲')