1. 程式人生 > 實用技巧 >Python第二

Python第二

今日內容概要

  • 基本運算子

  • 流程控制

  • 字元編碼

    理論特別多、結論特別少

  • 檔案處理

    今日內容詳細

基本運算子

1.算數運算子
x = 1
y = 5
res = x + y    #加
res1 = x - y   #減
res2 = x * y   #乘
res3 = x / y   #除

2.比較運算子
a = 1
b = 10
a > b
a < b
a >= b
a <= b
a == b
#一個等號是賦值符號 兩個等號才是真正的等號

3.賦值運算子
username = 'jason'

4.增量賦值
x = 10
x = x + 1    # x += 1
x = x - 1    # x -= 1
x = x * 1    # x *= 1
x = x / 1    # x /= 1


5.解壓賦值
name_list = [111,222,333,444,555]
a = name_list[0]
b = name_list[1]
c = name_list[2]
d = name_list[3]
e = name_list[4]
# 鏈式賦值操作
#a,b,c,d,e = name_list
# print(a,b,c,d,e)
# 左右兩側數量要一致(列表有五個元素那麼賦值符號的左邊就應該有五個變數名)
# res1,res2 = name_list  # too many values to unpack (expected 2)
# res1,res2,res3,res4,res5,res6 = name_list  # not enough values to unpack (expected 6, got 5)
# ret,*a = name_list  # *號可以將多餘的元素統一組織成列表賦值給後面的變數名
# print(ret,a)  # 111 [222, 333, 444, 555] 







6.交叉賦值
m = 666
n = 999
#將m和n的值互換
res = m
m = n
n = res
print(m,n)
# 交叉賦值
m,n = n,m
print(m,n)

7.解壓賦值
a = 100
b = a
c = a
d = a
# 簡寫 
a = b = c = d = 100

8.邏輯運算
and       與
or        或
not       非


and連結多個條件必須多個條件都為true結果才為true,只要有一個是false那麼結果就是false

or連結多個條件只需要有一個條件為true結果就為true,只要所有的都是false那麼結果才是false

# and,or,三者如果混用時,是存在優先順序之分的,但在日常開發中我們無需記優先順序,應該使用()來區分優先順序、提升程式的可讀性

9.成員運算
>>>'lili' in ['jack','tom','robin']
false
>>>'lili' not in ['jack','tom','robin']
true

10.身份運算
#1.id相同 記憶體地址必定相同,意味著type和values必定相同
#2.value相同type肯定相同,但是IP不一定相同,如下
>>> x='Info Tony:18'
>>> y='Info Tony:18'
>>> id(x),id(y) # x與y的id不同,但是二者的值相同
(4327422640, 4327422256)


>>> x == y # 等號比較的是value
True
>>> type(x),type(y) # 值相同type肯定相同
(<class 'str'>, <class 'str'>)
>>> x is y # is比較的是id,x與y的值相等但id可以不同
False


流程控制

"""
**********************************************
python中是通過程式碼的縮排來表示程式碼的從屬關係
if 條件1:
    程式碼1
    程式碼2
這裡的程式碼1和程式碼2縮進了,所以它們是屬於if的,它們能不能執行完全取決於if    

冒號後面才可以有子程式碼,並且多個子程式碼必須是相同的縮排量
**********************************************
"""
 if 條件1:   # 如果條件1的結果為True,就依次執行:程式碼1、程式碼2,......
   程式碼1
    程式碼2
    ......
elif 條件2: # 如果條件2的結果為True,就依次執行:程式碼3、程式碼4,......
   程式碼3
    程式碼4
    ......
elif 條件3: # 如果條件3的結果為True,就依次執行:程式碼5、程式碼6,......
   程式碼5
    程式碼6
    ......
else:     # 其它情況,就依次執行:程式碼7、程式碼8,......
    程式碼7
    程式碼8
    ......
# 注意:
# 1、python用相同縮排(4個空格表示一個縮排)來標識一組程式碼塊,同一組程式碼會自上而下依次執行
# 2、條件可以是任意表達式,但執行結果必須為布林型別
     # 在if判斷中所有的資料型別也都會自動轉換成布林型別
       # 2.1、None,0,空(空字串,空列表,空字典等)三種情況下轉換成的布林值為False
       # 2.2、其餘均為True 

while迴圈

while 條件:
     程式碼1
     程式碼2
     程式碼3
     ……
#while的執行步驟:
# 步驟1:如果條件為真,那麼依次執行:程式碼1、程式碼2、程式碼3、# 步驟2:執行完畢後再次判斷條件,如果條件為True則再次執行:程式碼1、程式碼2、程式碼3、......,如果條件為False,則迴圈終止


while True:
    # 1 先獲取使用者的使用者名稱和密碼
    username = input('請輸入您的使用者名稱>>>:')
    password = input('請輸入您的密碼>>>:')
    # 2 拿著使用者名稱和密碼去資料庫裡面比對select * from userinfo where username=username and password=password;
    if username == 'jason' and password == '123':
        print('登入成功')
    else:
        print('使用者名稱或者密碼錯誤')
        
   
# 使用者輸入了正確的使用者名稱和密碼之後 應該結束迴圈
# while True:
#     # 1 先獲取使用者的使用者名稱和密碼
#     username = input('請輸入您的使用者名稱>>>:')
#     password = input('請輸入您的密碼>>>:')
#     # 2 拿著使用者名稱和密碼去資料庫裡面比對select * from userinfo where username=username and password=password;
#     if username == 'jason' and password == '123':
#         print('登入成功')
#         # 應該結束掉while迴圈
#         break  # break只能結束掉它所屬的那一個while迴圈
#     else:
#         print('使用者名稱或者密碼錯誤')
# print('我終於出來啦')


# while True:
#     # 1 先獲取使用者的使用者名稱和密碼
#     username = input('請輸入您的使用者名稱>>>:')
#     password = input('請輸入您的密碼>>>:')
#     # 2 拿著使用者名稱和密碼去資料庫裡面比對select * from userinfo where username=username and password=password;
#     if username == 'jason' and password == '123':
#         print('登入成功')
#         while True:
#             cmd = input('親愛的貴賓有什麼可以幫助您的>>>:')
#             if cmd == 'exit':
#                 break  # break只能結束掉它所屬的那一個while迴圈
#             print('真正幫您執行:%s'%cmd)
#         break
#     else:
#         print('使用者名稱或者密碼錯誤')
# print('我終於出來啦')


# 當你想一次性結束多層while巢狀 你可以考慮使用標誌位
# flag = True
# while flag:
#     # 1 先獲取使用者的使用者名稱和密碼
#     username = input('請輸入您的使用者名稱>>>:')
#     password = input('請輸入您的密碼>>>:')
#     # 2 拿著使用者名稱和密碼去資料庫裡面比對select * from userinfo where username=username and password=password;
#     if username == 'jason' and password == '123':
#         print('登入成功')
#         while flag:
#             cmd = input('親愛的貴賓有什麼可以幫助您的>>>:')
#             if cmd == 'exit':
#                 flag = False
#             print('真正幫您執行:%s'%cmd)
#     else:
#         print('使用者名稱或者密碼錯誤')
# print('我終於出來啦')


# 用while迴圈列印1,2,3,4,5,6,7,9
num = 1
while num < 10:
    # 如果num是8就不列印
    if num == 8:
        num += 1
        continue  # 結束它所屬的那一個while的本次迴圈直接開始下一次迴圈
    print(num)
    num += 1

"""
break不給機會了          直接結束
continue再給一次機會     重新開始
"""


for迴圈

for 變數名 in 可迭代物件: #此時只需知道可迭代物件可以是字串\列表\字典
    程式碼一
    程式碼二
    
#例一
for item in['a','b','c']:
    print(item)
# 執行結果
a
b
c
# 參照例1來介紹for迴圈的執行步驟
# 步驟1:從列表['a','b','c']中讀出第一個值賦值給item(item=‘a’),然後執行迴圈體程式碼
# 步驟2:從列表['a','b','c']中讀出第二個值賦值給item(item=‘b’),然後執行迴圈體程式碼
# 步驟3: 重複以上過程直到列表中的值讀盡

資料型別及內建方法

在Python中不同的資料型別之間預設是無法直接做操作的
整型和浮點型本身沒有其他多餘的內建方法
# ret = '666' + 3
# print(ret)  # 在python中不同的資料型別之間預設是無法直接做相互操作的

# res = int('666') + 3  # int('666') = 666
# print(res)

# res = int('666.6') + 3  # 報錯
# print(res)
# res = float('666.6') + 3
# print(res)
# res = int('abc') + 3  # 報錯
# print(res)
while True:
    num = input('>>>:')
    # 判斷使用者輸入的字串是否是純數字
    if num.isdigit():
        num = int(num)
        res = num + 10
        print(res)
    else:
        print('必須輸入純數字')
        
        
# 字串
# n = 111
# f = 11.11
# l = [1,2,3,4]
# d = {'username':'jason'}
# res1 = str(n)
# res2 = str(f)
# res3 = str(l)
# res4 = str(d)
# print(res1,res2,res3,res4)   # 任何資料型別都可以轉字串

s = 'hello jason you are very handsome!!! 666 NB'
# 1 索引取值
# print(s[0])
# print(s[0:8])  # 顧頭不顧尾
# print(s[0:8:2])  # 步長
# print(s[-1:-5:-1])  # 瞭解
# 2 長度
# print(len(s))
# 3 成員運算
# print('666' in s)
# 4 移除首位的空白
# username = input('》》》:').strip()
# if username == 'jason':
#     print('老闆好')
# res = '$$jas$on$$'
# print(res.strip('$'))  # jas$on
# 5 切割
user_info = 'jason|123|NB|study'
# res = user_info.split('|')r
# print(res)  # ['jason', '123', 'NB', 'study']
# res = user_info.split('|',maxsplit=1)  # 從左往右
# print(res)  # ['jason', '123|NB|study']
# res = user_info.rsplit('|',maxsplit=1)  # 從右往左
# print(res)  # ['jason|123|NB', 'study']

猜年齡題
while x == 0:
if n < 3:
username = input('exit退出\n請輸入使用者名稱:')
if username == "exit":
break
pwd = input("請輸入密碼:")
if username == 'x' and password == '900876':
x = 0
y = 0
import random

        def game():
            w = 1
            while w == 1:
                n = 1
                n2 = 6
                age = random.randint(0,10)
                while True:
                    if n < n2:
                        age = input("第%s猜:"%n).str:
                        if age.lsdigit() == False:
                            print(int("你確定嗎?")
            elif int(age) < age:
                print("第%s次猜小了"%n)
                n += 1
            elif int(age) > age:
                print("第%s次猜大了"%n)
                n += 1
            else:   
                r = input("第%s次猜對了!!!\n按y再玩一次\n按n退出遊戲\n輸入exit退出程式"%b).strip()
                if r == "n":
                    break
                elif r == "n":
                    z = 0
                    break
                elif d == "exit":
                    global x
                    z = 0
                    x = 1
                    break
        else:   
            if n2 == 11:    
                print("你總算猜對了!")
            elif n2 == 16:
                print("你是認真的嗎!")
            elif n2 == 21:
                print("不會有人%s次都猜不出吧!\n不會吧!\n不會吧!!\n不會吧!!!"%(b-1))
            elif n2 > 21:
                print("別玩了!你夠了!!")
                
            d = input("你已經猜錯%s次了,按y增加五次機會"%(b-1))
            if d == "y":
                n2 += 5
                continue
            else:
                x = 1
                z = 0
                break

else:
print("賬號密碼錯誤")
n += 1
else:
c = input("你已輸錯三次,按y在獲得三次機會,其他退出。")
if c == "y":
n = 0
else:
break