作業(yè):
1.寫出判斷一個(gè)數(shù)是否能同時(shí)被3和7整除的條件語句, 并且打印對(duì)應(yīng)的結(jié)果。
num = eval(input('請(qǐng)輸入需要判斷的數(shù)字:'))
if num % 3 == 0 and num % 7 == 0:
print("%d能被3和7同時(shí)整除" % num)
else:
print('%d不能同時(shí)被3和7整除' % num)

2.寫出判斷一個(gè)數(shù)是否能夠被3或者7整除,但是不能同時(shí)被3或者7整除, 并且打印對(duì)應(yīng)的結(jié)果.
num1 = eval(input('請(qǐng)輸入需要判斷的數(shù)字:'))
if num1 % 3 == 0 or num % 7 == 0:
if num1 % 21 == 0:
print('%d能被3或者7整除而且能同時(shí)被3或者7整除' % num1)
else:
print('%d能被3或7整除但是不能同時(shí)被3或7整除' % num1)
else:
print('%d不能被3或者7整除也不能被3或7同時(shí)整除' % num1)

3.輸入年,寫代碼判斷輸入的年是否是閏年,如果是輸出'閏年',否則輸出'不是閏年'
year = eval(input('請(qǐng)輸入年份'))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print('%d年為閏年' % year)
else:
print('%d年不是閏年' % year)

4.今天上課講了15000秒的課,編程計(jì)算今天上課時(shí)間是多少小時(shí),多少分鐘,多少秒;以‘XX時(shí)XX分XX秒’的方式表示。
tim_s = 15000
tim_h = int(15000 / 3600)
tim_mleft = int(tim_s % 3600)
tim_m=int(tim_mleft/60)
tim_s=0
print('今天上課{}小時(shí),{}分鐘,{}秒'.format(tim_h, tim_m, tim_s))

5.定義兩個(gè)變量保存一個(gè)人的身高和體重,編程實(shí)現(xiàn)判斷這個(gè)人的身材是否正常!
公式: 體重(kg)/身高(m)的平方值在18.5 ~ 24.9之間屬于正常。
weight=52
high=1.75
if 18.5<= weight/high**2<=24.9:
print('身材正常')
else:
print('身材不正常')

六
1)表達(dá)式0x13 & 0x17的值 == (19)
2)表達(dá)式0x13 | 0x17的值==(23)
3)表達(dá)式0x13 ^ 0x17的值==(4)
4) 若x=12,y=13則x&y的結(jié)果是==(12)
5)在位運(yùn)算中,操作數(shù)每右移一位,其結(jié)果相當(dāng)于( )
- 操作數(shù)乘以2
- 操作數(shù)除以2
- 操作數(shù)乘以4
- 操作數(shù)乘以4
6).設(shè)x 是一個(gè)整數(shù)(16bit).若要通過x|y使x低度8位置1,高8位不變,則y的二進(jìn)制數(shù)是(0000000011111111)
總結(jié)
一、變量
1.什么是變量:聲明變量是用來申請(qǐng)空間保存數(shù)據(jù)的 聲明完變量后,使用變量就是使用變量里存儲(chǔ)的值。
聲明變量的語法:變量名 = 值
說明:變量名是由程序猿自己命名的:
要求:1.是標(biāo)識(shí)符 2.不能是關(guān)鍵字
規(guī)范:見名知義;滿足PEP8命名規(guī)范(所有的字母都小寫;多個(gè)單詞組合的變量名用下劃線連接 stu_name)
不能使用系統(tǒng)提供的函數(shù)名、類名、庫名等來給變量命名,如 True = 100
= -> 賦值符號(hào),將右邊的數(shù)據(jù)賦給左邊的變量(verb)
值 ->任何有結(jié)果的表達(dá)式。例如:數(shù)據(jù) 已經(jīng)聲明過的變量 運(yùn)算表達(dá)式等
例如下面的變量聲明:
b1 = 0b1011
b = 5
b2 = True
b3 = 10 + 2
b4 = 10 + 2 + b3
print(b, b1, b2, b4, sep='\t', end='\n')
2.變量的使用:使用變量就是使用變量里存儲(chǔ)的值;變量的值是可以修改的。
age = 50
age = 18
print(age)
3.同時(shí)聲明多個(gè)變量
a.同時(shí)聲明多個(gè)變量賦相同的值 變量名1=變量名2=變量名3=值
b.同時(shí)聲明多個(gè)變量賦不同的值,變量1,變量名2,變量名3 = 值1,值2,值3
c1 = c2 = c3 = 10
print(c1, c2, c3)
x, y = 10, 20
print(x, y)
4.python變量聲明的原理
先開辟空間存儲(chǔ)數(shù)據(jù)(存儲(chǔ)的數(shù)據(jù)需要多大的內(nèi)存,就開辟多少內(nèi)存空間,然后再將變量和數(shù)據(jù)對(duì)應(yīng)的內(nèi)存空間關(guān)聯(lián)在一起)
變量三要素:
a=10
值 - 變量存儲(chǔ)的數(shù)據(jù)(給變量賦值的數(shù)據(jù) 10 ) -使用變量
類型 - 給變量賦值的數(shù)據(jù)類型(int)
地址-給變量賦值的數(shù)據(jù)在內(nèi)存中的地址,也是變量中真正存儲(chǔ)的東西(0xff)
a = 10
print(a, type(a), id(a))
a = 100
print(a, type(a), id(a))
b = a
print(id(b))
輸出如下:
10 <class 'int'> 1677903936
100 <class 'int'> 1677905376
1677905376
在Python中,用一個(gè)變量給另一個(gè)變量賦值的時(shí)候,是將原來的變量中數(shù)據(jù)的地址賦值給另外一個(gè)變量。
賦值完成后,數(shù)據(jù)還是只有一個(gè),只是說數(shù)據(jù)的地址被兩個(gè)變量所保存。
二、運(yùn)算符
ython支持的運(yùn)算符:數(shù)學(xué)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算,位運(yùn)算。
1.數(shù)學(xué)運(yùn)算符
+ - * / %(取余) //(整除) **(次方)冪運(yùn)算
a、 + - * /與小學(xué)數(shù)學(xué)中的加減乘除功能一模一樣
print(1 + 1,)
print(20 - 10,)
print(20 * 10)
print(5 / 2)
計(jì)算結(jié)果為:
2 10 200 2.5
b、 % -求余數(shù),也叫取余、取模
print(5 % 2,)
print(10 % 4,)
計(jì)算結(jié)果為:
1 2
應(yīng)用1:判斷數(shù)字的奇偶性:判斷這個(gè)數(shù)對(duì)2取余的結(jié)果是不是0。
print(20 % 2)
print(23 % 2)
計(jì)算結(jié)果為:
0 1
應(yīng)用2:是否整除,判斷余數(shù)是否為0。
應(yīng)用3:取低位數(shù),獲取一個(gè)數(shù)的個(gè)位數(shù)是什么。
num = 123
print(num % 10) # 3
print(num % 100) # 23
c、整除:商只取整數(shù)部分。注意! 負(fù)數(shù)除不盡的時(shí)候向下取整
print(5 // 2) # 2
print(3.9 // 3) # 1.0
應(yīng)用:取高位
print(num // 100)
d、** -冪運(yùn)算 x**y ->求x的y次方
print(2 ** 3) # 次方
print(8 ** (1 / 2)) # 開平方
result = 2 ** 5
print(result)
計(jì)算結(jié)果為:
8 2.8284271247461903 32
2.比較運(yùn)算符
比較運(yùn)算符 < > = != >= <=
1.< > >= <=和數(shù)學(xué)中的一樣
所有的比較運(yùn)算符的運(yùn)算結(jié)果都是布爾值(True False)
print(10 > 20) # False
print(10 < 20) # True
2.== 和!= 是判斷兩個(gè)值是否相等和不相等
print(10 == 10) #True
print(10 != 10) #False
3.邏輯運(yùn)算符 and(邏輯與) or(邏輯或) not(邏輯非),運(yùn)算對(duì)象和運(yùn)算結(jié)果都是布爾值.
a、and
運(yùn)算規(guī)則為:兩個(gè)都是True,結(jié)果才是為True,只要有一個(gè)是False,結(jié)果就是False
True and True = True
True and False = False
False and True = False
False and False = False 只要有一個(gè)False就是False
使用場景:需要多個(gè)條件同時(shí)滿足的時(shí)候,就用and,相當(dāng)于生活中的并且
# 獲取獎(jiǎng)學(xué)金的條件:
GPA = 4.5
score = 90
# 績點(diǎn)不低于4 且測(cè)評(píng)分要高于95
if GPA >= 4 and score > 95:
print("可以獲得獎(jiǎng)學(xué)金")
else:
print("不能獲得獎(jiǎng)學(xué)金")
判斷一個(gè)數(shù)是否能夠同時(shí)被3和7整除
print('同時(shí)被三和七整除:', num1 // 7 == 0 and num1 // 3 == 0)
b、or
運(yùn)算規(guī)則:兩個(gè)都是false結(jié)果才是false,只要有一個(gè)是True,結(jié)果就是True
True or False == True
True or True == True
False or True == True
False or False == False
應(yīng)用場景:在多個(gè)條件中,需要有一個(gè)條件滿足就行,就使用false,相當(dāng)于生活中的or
績點(diǎn)不低于4或者測(cè)評(píng)分要高于95
print('能否獲取獎(jiǎng)學(xué)金', GPA >= 4 or score >= 95)
c、not
運(yùn)算規(guī)則:True變False False變True
not True -> False
not False -> True
使用場景:對(duì)某一個(gè)條件進(jìn)行否定
如:一個(gè)數(shù)不能同時(shí)被三和七整除的條件
print('不能同時(shí)被三和七整除', not (num1 % 7 == 0 and num1 % 3 == 0))
d、短路操作
and的短路操作:條件1 and 條件2 ,-> and前面的條件如果結(jié)果是False,那么后面的條件語句不會(huì)執(zhí)行,結(jié)果直接是False
or的短路操作:條件1 or 條件2 ,or 前面的條件如果結(jié)果是True,那么后面的條件語句不會(huì)執(zhí)行,結(jié)果直接是True
def func1():
print('函數(shù)被執(zhí)行了')
True and func1() # and 遇到True了才會(huì)執(zhí)行第二個(gè)條件
def func2():
print('or的函數(shù)被執(zhí)行了')
False or func2() # 只有第一個(gè)條件是False,才會(huì)執(zhí)行第二個(gè)條件
True or func2() # 第一個(gè)條件是True,整個(gè)算式就是True,第二個(gè)條件不被執(zhí)行
4.賦值運(yùn)算符:= += *= -= /= //= **=
所有的賦值運(yùn)算符左邊必須是變量,組合賦值運(yùn)算符的左邊除了是變量
,這個(gè)變量還要求必須是已經(jīng)聲明過的
1):變量 = 數(shù)據(jù) -> 將右邊的數(shù)據(jù)賦給左邊的變量
a = 10
b = 10 * 2
2):組合的賦值運(yùn)算符
變量 += 值 —-> 變量=變量+值
bb = 100 # 組合賦值運(yùn)算符要求一個(gè)已經(jīng)聲明的變量
bb += 10 # bb=bb+10
print(bb)
i = 5
i **= 5
print(i)
5.運(yùn)算順序
運(yùn)算符優(yōu)先級(jí):
數(shù)學(xué)運(yùn)算符 > 比較運(yùn)算符> 邏輯運(yùn)算符 > 賦值運(yùn)算符(最低)
數(shù)學(xué)運(yùn)算符的優(yōu)先級(jí)和數(shù)學(xué)一樣:*>,/,//,%
如果有括號(hào),先算括號(hào)里面的
三.位運(yùn)算
所有的位運(yùn)算都是針對(duì)數(shù)字的補(bǔ)碼進(jìn)行操作的,特點(diǎn)就是快(效率高)
位運(yùn)算:&(與),|(或),~(取反),^(異或), <<(左移),>>(右移)
1. &
運(yùn)算規(guī)則:補(bǔ)碼每一位上的數(shù)都是1,結(jié)果就是1,如果有一個(gè)是0結(jié)果就是0
應(yīng)用:高效的判斷數(shù)字的奇偶性
所有奇數(shù)的補(bǔ)碼在計(jì)算機(jī)中最后一位都是1
所有偶數(shù)的補(bǔ)碼在計(jì)算機(jī)中最后一位都是0
方法:讓數(shù)字和1進(jìn)行按位與運(yùn)算.000000001 ,判斷結(jié)果是0(偶數(shù))還是1(奇數(shù))
假設(shè)一個(gè)數(shù)字的補(bǔ)碼是1101
另一個(gè)數(shù)字的補(bǔ)碼是0111
1110 & 0111 == 0110
3的補(bǔ)碼:00000011
2的補(bǔ)碼:00000010
00000011 & 00000010 =00000010 == 2
奇偶性判斷:
print(7 & 1, 9 & 1) # 奇數(shù)與1與,結(jié)果為1
print(8 & 1, 16 & 1) # 偶數(shù)與1與,結(jié)果為0
2 . |
運(yùn)算規(guī)則:每一位上的數(shù),如果都是0,則結(jié)果都是0,只要有1,結(jié)果都是1
1110 | 0111 -> 1111
3.~
運(yùn)算規(guī)則:將每一個(gè)位上的0變1,1變成0
1101 -> 0010
print(~ -7) # 11111001(補(bǔ)碼) -> 00000110 == 6
4.^
運(yùn)算規(guī)則:每一位上的數(shù),如果是相同的,則為0,不同則為1
11011 ^ 10010 -> 01001
5.<<
數(shù)字<<N -> 數(shù)字的補(bǔ)碼整體向左移動(dòng)N位 數(shù)字左移一位就是這個(gè)數(shù)字2*N
print(2 << 1) # 2*2**1=4
print(3 << 2) # 3*2**2=12
6.>>
數(shù)字>>N 數(shù)字的補(bǔ)碼整體向右移動(dòng)N位 計(jì)算:數(shù)字//2**N
print(4 >> 1) # 4//2**1==2
print(-8 >> 2) # -8 // 2**2 == -2
四.分支結(jié)構(gòu)
Python代碼默認(rèn)情況下是從第一行開始從上往下依次執(zhí)行。除注釋以外的每條語句都會(huì)執(zhí)行
分支結(jié)構(gòu):某段代碼是否執(zhí)行看條件(if)
1.if結(jié)構(gòu)
語法:
if 條件語句:
代碼段
其他代碼
說明:
if -關(guān)鍵字,為固定寫法
條件語句 - 任何有結(jié)果的表達(dá)式都可以,例如:數(shù)據(jù),已經(jīng)聲明過的變量,運(yùn)算表達(dá)式(不能是賦值運(yùn)算)
: -固定寫法;一般有冒號(hào)的位置,后面都會(huì)換行加縮進(jìn)
代碼段 - 和if保持一個(gè)縮進(jìn)的一條或者多條語句;需要滿足條件才執(zhí)行的代碼。
執(zhí)行過程:
先判斷條件語句的結(jié)果是否為True(如果條件語句的結(jié)果不是布爾值,就先轉(zhuǎn)換成布爾值再看,只要不是0不是空就全是True)
如果為True 就執(zhí)行代碼段 否則不執(zhí)行
num = 10
if num & 1 == 0:
print('偶數(shù)')
2.if-else
滿足條件執(zhí)行某個(gè)操作,不滿足條件執(zhí)行另外一個(gè)操作
語法:
if 條件語句:
代碼段1 滿足條件要執(zhí)行的代碼
else:
代碼段2 不滿足條件要執(zhí)行的代碼
執(zhí)行過程:
先判斷條件一句是否為True,如果為True就執(zhí)行代碼段1,否則執(zhí)行代碼段2
age = 20
# 根據(jù)年齡值范圍打印成年或者未成年
if age >= 18:
print('成年')
else:
print('未成年')