1.用來判斷事物的對錯 是否可行 只要用於流程控制中
2.只有兩種狀態
	True 對的 真的 可行的
  	False 錯的 假的 不可行的
3.python中所有數據都自帶布爾值
	布爾值為False的數據有:0 None '' [] {}
	布爾值為True的數據有:除了上面的都是True
4.存儲布爾值的變數名一般推薦使用is開頭
	is_delete = False
 	is_alive = True
"""
很多程式中提供的註銷帳戶的功能 其實底層並沒有刪除數據 而是修改了數據的狀態
id		username	password    phone    is_delete
1		jimmy		123		   110     	  1
2		kevin		321		   120		  0
"""
EX:
1.也稱為『不可變』的列表
	元組內索引綁定的記憶體位址不能修改
2.小括弧括起來 內部存放多個數據值 數據值與數據值之間逗號隔開 數據值可以是任何數據類型
3.代碼實現
	t1 = (11, 22, 'jimmy')
4.元組與列表的對比
	# 列表
	l1 = [11, 22, 33]
    print(l1[0]) # 獲取索引0對應的數據值
    l1[0] = 666
    print(l1)  # [666, 22, 33]
	# 元組
	t1 = (11, 22, 33)
    print(t1[0])
    t1[0] = 999
    print(t1) # 報錯
	# 練習題 元組混列表
	t1 = (11, 22, [111, 222])
    t1[2][1] = 666
    print(t1) # (11, 22, [111, 666])
    """
    A.直接報錯
    B.(11, 22, [111, 666])
    C.不知道 超出了我的認知
    """
5.元組內如果只有一個數據值
	t1 = (1)
    t2 = (11.11)
    t3 = ('Jimmy')
    print(type(t1), type(t2), type(t3))  # <class 'int'> <class 'float'> <class 'str'>
    t1 = (1,)
    t2 = (11.11,)
    t3 = ('Jimmy',)
    print(type(t1), type(t2), type(t3))  # <class 'tuple'> <class 'tuple'> <class 'tuple'>
    """
    建議:以後在使用可以存放多個數據值的數據類型時 如果裡面暫時只有一個數據值 那麼也建議你加上逗號
    """
EX1:元組與列表的對比
列表:
圖解:
元組:
圖解:EX2:練習題 元組混列表
圖解:
EX3:元組內如果只有一個數據值
1.集合只能用於去重和關係運算
	後面再講 暫且忽略
2.集合內數據只能是不可變類型
	後面再講 暫且忽略
3.大括弧括起來 內部存放多個數據值 數據值與數據值之間逗號隔開 數據值不是k:v鍵值對
4.代碼實現
	s1 = {1, 2, 3, 4, 5, 6}
5.定義空集合與空字典	
	{} 預設是字典
 	set() 定義空集合
EX1:定義空集合
1.獲取使用者輸入
	input
	# 獲取使用者輸入
    username = input('請輸入您的使用者名>>>:')
    """
    1.先執行input獲取用戶輸入
    2.將輸入的數據綁定給變數名username
    3.以後在程式中就可以使用變數名反覆調用用戶數據
    """
	強調:input獲取到的數據都會統一處理成字串類型
2.輸出內部資訊
	print
 	1.括弧內既可以放數據值也可以放變數名 並且支援多個 逗號隔開即可
 	2.print自帶換行符
		換行符:\r\n \n(斜杠與字母組合到一起可能會產生特殊的含義)
	3.print也可以切換結束符
    	print(數據,end='預設是\n')
擴展:python2與python3中兩個關鍵字的區別
 	python2中
    	input方法需要使用者自己提前指定數據類型 寫什麼類型就是什麼類型
 	 	 raw_input方法與python3中input一致 輸入的統一處理成字串	
	python2中
    	print方法有兩種使用方式
			print 數據值
			print(資料值)
EX1:1.獲取使用者輸入
EX2:input獲取到的數據都會統一處理成字串類型
EX3:輸出內部資訊
EX4:2.print自帶換行符
EX5:3.print也可以切換結束符
EX6:python2與python3中兩個關鍵字的區別
python2
input方法需要使用者自己提前指定數據類型 寫什麼類型就是什麼類型
raw_input方法與python3中input一致 輸入的統一處理成字串	
python2
print方法有兩種使用方式
	print 數據值
	print(資料值)
提前定義好一些內容 將來需要使用的時候可以局部修改
	
代碼實現
	在現實生活中大部分情況下使用下劃線提示別人填寫內容
 	但是在程式中需要使用佔位元:%s %d
info = '%s同學你好'
'''單個佔位符'''
# print(info % 'Jimmy') # Jimmy同學你好
# print('%s同學你好' % 'Tony') # Tony同學你好
# print(info % ('Jimmy',))
# print('%s同學你好' % ('Tony',))
'''多個佔位符'''
# desc = '姓名:%s 年齡:%s 愛好:%s'
# print(desc % ('Jimmy', 18, 'read'))
# print('姓名:%s 年齡:%s 愛好:%s' % ('tony', 28, 'rap'))
'''注意事項:有幾個佔位符就需要幾個數據值'''
# print('my name is %s my age is %s' % ('Jimmy',)) # 少了不行
# print('my name is %s my age is %s' % ('Jimmy', 18, 'read')) # 多了不行
'''不同佔位符的區別'''
# demo1 = '%s您好 您本月的話費是%s 餘額是%s' # %s常見數據類型都支援
# print(demo1 % ('Jimmy', 100, 10000000000000))
# demo2 = '%d您好 您本月的話費是%d 餘額是%d' # %d只支援數字類型
# print(demo2 % ('tony', 1000000000, -100000))
print('%08d'% 123)  # 00000123
print('%08d'% 1234324324)  # 1234324324
EX1:單個佔位符
EX2:多個佔位符
EX3:注意事項:有幾個佔位符就需要幾個數據值
EX4:不同佔位符的區別
%s常見數據類型都支援
%d只支援數字類型
EX5:%d補位功能
以下假設變數: a=10,b=20:
| 運算符 | 描述 | 實例 | 
|---|---|---|
| + | 加 - 兩個物件相加 | a + b 輸出結果 30 | 
| - | 減 - 得到負數或是一個數減去另一個數 | a - b 輸出結果 -10 | 
| * | 乘 - 兩個數相乘或是返回一個被重複若干次的字串 | a * b 輸出結果 200 | 
| / | 除 - x除以y | b / a 輸出結果 2 | 
| % | 取餘 - 返回除法的餘數 | b % a 输出结果 0 | 
| ** | 次方 - 返回x的y次方 | a**b 為10的20次方, 輸出結果 100000000000000000000 | 
| // | 取整除 - 傳回商的整數部分(向下取整) | >>>9//2 4, >>>-9//2 -5 | 
1.數學運算符
    + - * / % // **
    簡化寫法
    n = 10
    n += 1  # n = n + 1
    n -= 1  # n = n - 1
    n *= 1  # n = n * 1
    n /= 1  # n = n / 1
    n %= 1  # n = n % 1
    n //= 1  # n = n // 1
    n **= 1  # n = n ** 1
2.比較運算符
	< > <= >= ==(等於號) !=(不等於)
1.鏈式賦值
	# name = 'jimmy'
    # name1 = name
    # name2 = name
    # 鏈式賦值
    name = name1 = name2 = 'jimmy'
2.交叉賦值
	m = 100
    n = 999
    '''讓m和n互相轉換綁定的值'''
    """奇葩式寫法"""
    # m = n
    # n = m
    # print(m, n)  # 999 999
    '''方式1:採用中間變數'''
    # temp = m
    # m = n
    # n = temp
    # print(m, n)  # 999 100
    '''方式2:交叉賦值語法'''
    m, n = n, m
    print(m, n)  # 999 100
3.解壓賦值
	 name_list = ['jimmy', 'kevin', 'tony', 'oscar']
    '''low的寫法'''
    # name1 = name_list[0]
    # name2 = name_list[1]
    # name3 = name_list[2]
    # name4 = name_list[3]
    '''解壓賦值語法'''
    # name1, name2, name3, name4 = name_list
    '''解壓賦值在使用的時候 正常情況下需要保證左邊的變數名與右邊的數據值個數一致'''
    # a, b = name_list  # 變數名少了不行
    # a, b, c, d, e = name_list  # 變數名多了也不行
    '''當需要解壓的數據個數特別多 並且我們只需要使用其中的幾個 那麼可以打破上述的規則'''
    # a, *b = name_list  # *會自動接收多餘的數據 組織成列表賦值給後面的變數名
    # print(a)  # jimmy
    # print(b)  # ['kevin', 'tony', 'oscar']
    # a, c, *b = name_list
    # print(a)
    # print(c)
    # print(b)  # ['tony', 'oscar']
    # a, *b, c = name_list
    # print(a)  # jimmy
    # print(b)  # ['kevin', 'tony']
    # print(c)  # oscar
    '''當數據值不準備使用的時候 可以使用下劃線作為變數名綁定'''
    a, *_, c = name_list
EX1:1.鏈式賦值
EX2:2.交叉賦值
奇葩式寫法:
圖解:
方式1:採用中間變數:
圖解:
方式2:交叉賦值語法:
EX3:3.解壓賦值
解壓賦值在使用的時候 正常情況下需要保證左邊的變數名與右邊的數據值個數一致
變數名少了不行
變數名多了也不行
當需要解壓的數據個數特別多 並且我們只需要使用其中的幾個 那麼可以打破上述的規則
*會自動接收多餘的數據 組織成列表賦值給後面的變數名
當數據值不準備使用的時候 可以使用下劃線作為變數名綁定
'''主要配合條件一起使用'''
and		與
	and連接的多個條件必須全部成立 結果才成立
	1 > 2 and 4 < 8 and 10 < 1 and 1 == 2  如果條件中全部由and組成那麼判斷起來非常的簡單 只要發現一個不成立 結果就不成立      
    print(1 < 10 and 666)  # 666  成立
    print(1 < 10 and 2 < 8)  # True  成立
    print(111 and 222)  # 222  成立
    
    如果需要你準確的說出具體的結果值 那麼需要按照下列方式
    如果and左邊的條件是成立的 那麼就完全取決於右邊的條件
    右邊如果直接是數據值 那麼結果就是該數據值 如果是含有表達式 則為布爾值  
or		或
	or連接的多個條件只要有一個成立 結果就成立
   1 > 2 or 4 < 8 or 10 < 1 or 1 == 2   如果條件中全部由or組成那麼判斷起來非常的簡單 只要發現一個成立 結果就成立   
	# print(1 < 10 or 666)  # True
    # print(666 or 1 > 10)  # 666
    print(0 or False)  # False
    print(0 or 111)  # 111
    規律用and    
not		非
	取反
 	類似於說反話
	print(not 1)  # False  
	print(not 0)  # True
"""
三者混合使用的時候有優先順序之分 但是我們不需要記憶優先順序 應該通過代碼的形式提前規定好優先順序
	eg: 先乘除後加減 但是可以使用括弧來改變優先順序
	(3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
"""
EX1:and
EX2:or
EX3:not
三者混合使用的時候有優先順序之分 但是我們不需要記憶優先順序 應該通過代碼的形式提前規定好優先順序
判斷個體在不在群體內
# name_list = ['jimmy', 'kevin', 'oscar', 'jerry']
# print('tony' in name_list)  # False
# print('tony' not in name_list)  # True
# print('j' in name_list)  # False 列表最小單位是數據值 不能再細分
# s1 = 'hello world'
# print('d' in s1)  # 字串最小單位是單個單個的字元
d1 = {
      'username': 'jimmy',
      'pwd': 123
}
print('jimmy' in d1)  # False 字典成員運算只有鍵參與
print('username' in d1)  # True      'username' 'pwd'
EX1:成員運算符
列表
字串
字典
"""
id()  返回一串數字 該數字可以看成是記憶體位址
"""
is	   判斷記憶體位址是否相同
==     判斷數據值是否相同
# l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# l2 = [11, 22, 33, 44, 55, 66, 77, 88]
# print(l1 == l2)  # True
# print(id(l1))
# print(id(l2))
# print(l1 is l2)  # False
# 小整數池
i1 = 11
i2 = 11
print(i1 is i2)
s1 = 'jason jason jason'
s2 = 'jason jason jason'
print(s1 is s2)
不同的環境下可能優化的程度不一樣 
"""
了解
    值相同 内存地址可能不同
    内存地址相同 值肯定相同
"""
EX1:身份運算符
is	   判斷記憶體位址是否相同
==     判斷數據值是否相同
EX2:不同的環境下可能優化的程度不一樣
pycharm有額外做優化和解釋器出來結果不一樣
1.獲取使用者輸入並列印成下列格式
	 ------------ info of Jimmy -----------
    Name : Jimmy
    Age  : 18
    Sex  : male
    Job  : Teacher 
    ---------------- end -----------------
	 # 1.先制定一個列印的範本
    info_demo = """
        ------------ info of %s -------------
        Name : %s
        Age  : %s
        Job  : %s 
        ---------------- end -----------------
    """
    # 2.獲取用戶輸入
    username = input('username>>>:')
    age = input('age>>>:')
    job = input('job>>>:')
    # 3.格式化輸出
    print(info_demo % (username, username, age, job))
    
2.下列變數名v綁定的結果
	v1 = 1 or 3  # 1  
	v2 = 1 and 3  # 3  
	v3 = 0 and 2 and 1  # 0  
	v4 = 0 and 2 or 1  # 1 沒寫執行順序,是not->and->or  
	v5 = 0 and 2 or 1 or 4  # 1 沒寫執行順序,是not->and->or  
	v6 = 0 or False and 1  # False
EX1:1.獲取使用者輸入並列印成下列格式
EX2:2.下列變數名v綁定的結果
https://blog.goldfishbrain-fighting.com/2023/python-self-learning-day04/