【一】用戶交互
- 交互的本質就是輸入、輸出
- 用戶交互就是人往計算機中input/輸入數據,計算機print/輸出結果
【二】為什么要與用戶交互
【三】如何實現交互
username = input("請輸入你的用戶名:>>>")
password = input('請輸入你的密碼:>>>')
print(username, type(username)) # input接受的所有數據類型都是str類型
print(password, type(password)) # input接受的所有數據類型都是str類型
# input 語法
# (1)彈出輸入框
# input()
# (2)提示信息
# print("請輸入用戶名")
# input()
# (3)提示輸入信息并且獲取到輸入的信息
# 提示輸入框
# username = input("請輸入用戶名 :>>>> ")
# # 用變量接收到輸入的內容
# print(username)
# (4)輸入的內容永遠是字符串
# username = input("請輸入用戶名 :>>>> ")
# 用變量接收到輸入的內容
# print(username, type(username))
# 1 <class 'str'>
# True <class 'str'>
# (5)數據之間進行運算需要轉換數據類型
# num_1 = input("請輸入數字1 :>>> ")
# num_2 = input("請輸入數字2 :>>> ")
# result = num_1 + num_2
# 強制數據類型轉換 ---> 將符合當前數據類型的格式的數據轉換為指定的數據類型
# 1 = int("1")
# int("a")
# result = int(num_1) + int(num_2)
# print(result,type(result))
【2】輸出(print)
print 函數用于向控制臺輸出信息。你可以使用 print 函數來顯示程序的運行結果、提示信息等。
# 直接打印變量或者字符串或者其他
# print("Hello World!")
name = "dream"
age = 18
# print(f"my name is {name},my age is {age}")
# print 語句允許存放多個變量名及變量值,但是每一個元素之間要用逗號 隔開
print(f"my name is", name, "my age is", age)
# print 可以修改默認的尾椎
# 默認自帶一個結束符,換行符,我們可以通過 end 參數修改默認的結束符
print(name, end='*')
print(age, end='&')
【四】運算符
【1】算數運算符
【1】加法運算符 +
x = 9
y = 2
result = x + y
print(result) # 輸出:11
【2】減法運算符 -
x = 9
y = 2
result = x - y
print(result) # 輸出:7
【3】乘法運算符 *
x = 9
y = 2
result = x * y
print(result) # 輸出:18
【4】除法運算符 /
x = 9
y = 2
result = x / y
print(result) # 輸出:4.5
【5】取整除運算符 //
x = 9
y = 2
result = x // y
print(result) # 輸出:4
【6】求余數運算符 %
x = 9
y = 2
result = x % y
print(result) # 輸出:1
【7】冪運算符 **
x = 9
y = 2
result = x ** y
print(result) # 輸出:81
【2】比較運算符
【1】相等運算符 ==
x = 9
y = 2
result = x == y
print(result) # 輸出:False
【2】不等運算符 !=
x = 9
y = 2
result = x != y
print(result) # 輸出:True
【3】大于運算符 >
x = 9
y = 2
result = x > y
print(result) # 輸出:True
【4】小于運算符 <
x = 9
y = 2
result = x < y
print(result) # 輸出:False
【5】大于等于運算符 >=
x = 9
y = 2
result = x >= y
print(result) # 輸出:True
【6】小于等于運算符 <=
x = 9
y = 2
result = x <= y
print(result) # 輸出:False
【3】賦值運算符
- python語法中除了有=號這種簡單的賦值運算外
- 還支持增量賦值、鏈式賦值、交叉賦值、解壓賦值
- 這些賦值運算符存在的意義都是為了讓我們的代碼看起來更加精簡。
# = += -= *= /= %= //= **=
# += 增量賦值
增量賦值運算符用于將變量與右側的表達式相結合,并將結果賦值給變量
num_one = 2
num_one += 1 # num_one = num_one + 1
print(num_one)
num_two = num_one + 1
num_two += num_one
print(num_two)
# 鏈式賦值
鏈式賦值允許在單一語句中給多個變量賦值。這樣可以減少代碼行數,提高代碼的緊湊性。
a = b = c = 6
print(a, b, c)
# 交叉賦值
交叉賦值允許在不使用臨時變量的情況下,交換兩個變量的值。
x = 8
y = 9
x, y = y, x
print(x, y)
# 解壓賦值
解壓賦值允許將一個可迭代對象(如列表、元組等)的值解壓到多個變量中,以便進一步使用。
a, b = (1, 2)
print(a, b)
# 位置變量名少了不行
# a, b = (1, 2, 3)
# 位置變量名多了不行
# a, b, c, d = (1, 2, 3)
# 使用下劃線代替多余的元素
_, b, _ = (1, 2, 3)
print(b)
【五】邏輯運算符
- 邏輯運算符用于連接多個條件,進行關聯判斷,并返回布爾值
True 或 False。
- 常用的邏輯運算符包括與(
and)、或(or)、非(not)。
【1】與運算符 (and)
- 與運算符
and 在兩個條件都為 True 時,返回 True;如果其中一個條件為 False,則返回 False。
x = 5
y = 10
result = (x > 0) and (y > 0)
print(result) # 輸出:True
- 在上述例子中,
(x > 0) and (y > 0) 表示同時判斷 x > 0 和 y > 0 是否都為 True,因為兩個條件都滿足,所以結果為 True。
【2】或運算符 (or)
- 或運算符
or 在兩個條件中至少有一個為 True 時,返回 True;如果兩個條件都為 False,則返回 False。
x = -5
y = 10
result = (x > 0) or (y > 0)
print(result) # 輸出:True
- 在上述例子中,
(x > 0) or (y > 0) 表示判斷 x > 0 或者 y > 0 至少有一個條件為 True,因為 y > 0 為 True,所以結果為 True。
【3】非運算符 (not)
- 非運算符
not 用于對一個條件取反,如果條件為 True,則返回 False;如果條件為 False,則返回 True。
x = 5
result = not (x > 0)
print(result) # 輸出:False
- 在上述例子中,
not (x > 0) 表示對條件 x > 0 取反,因為 x > 0 為 True,所以結果為 False。
【4】連續問題
[1]連續多個 and
- 在連續多個
and 運算中,如果其中一個條件為 False,則整個表達式的結果為 False,即使后面的條件都為 True。
[2]連續多個 or
在連續多個 or 運算中,如果其中一個條件為 True,則整個表達式的結果為 True,即使后面的條件都為 False。
【3】優先級 not>and>or
print(3 > 4 and 4 > 3 or 1 == 3 and 'x' == 'x' or 3 > 3)
# False and True or Flase and True or Flase
# false or false or flase
# false
# 我們自己寫邏輯運算的時候建議 用 () 聲明優先級
print(10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4)
# 10 and 0 or false and false or "abc" or false adn 333 or true
# false or flase or "abc" or false or true
# false or "abc" or false or true
# "abc" or false or true
# "abc" or true
# "abc"
print("abc")
【六】成員運算符
【1】in運算符
fruits = ["apple", "banana", "cherry"]
print("banana" in fruits) # True
print("orange" in fruits) # False
【2】not in運算符
fruits = ["apple", "banana", "cherry"]
print("banana" not in fruits) # False
print("orange" not in fruits) # True
【七】身份運算符
- 身份運算符用于比較對象的內存地址,即判斷兩個對象是否指向同一塊內存地址。
【1】is運算符
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # True
print(a is c) # False 因為a 和 c 是兩個獨立的內存空間,所以 a 不是 c
【2】is not運算符
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is not b) # False
print(a is not c) # True
- 這兩個運算符主要用于檢查對象的標識,即它們是否指向相同的內存地址。
# 【補充】 == 和 is 的區別
# 比較運算符,比較的值先相等
# == 比較的是 值是否相等
# is 比較的是 內存空間地址
== 雙等號比較的是value是否相等
is用于比較兩個對象的標識id(內存地址)是否相同
- 在實際應用中,特別是對于可變對象,
==通常更適合用于比較值,而is更適合用于比較對象的身份。
- id相同,內存地址必定相同,意味著type和value必定相同
- value相同type肯定相同,但id可能不同
【八】流程控制(if-elif-else)
- 程序是由語句構成,而流程控制語句 是用來控制程序中每條語句執行順序的語句。
- 可以通過控制語句實現更豐富的邏輯以及更強大的功能。
- 幾乎所有編程語言都有流程控制語句,功能也都基本相似。
- 其流程控制方式有
- 這里最簡單最常用的就是順序結構,即語句從上至下一一執行。
【1】順序結構
- 順序結構用于按照既定的順序執行一系列的操作,這是程序執行的最基本模式。
- 通過良好的順序結構,可以清晰地表達程序的邏輯流程,使代碼易讀易懂。
- 這有助于開發者理解和維護代碼,也方便調試。
【2】單分支結構(if)
- 單分支結構指的是程序根據條件的成立與否,執行兩個分支中的其中一個。
- 常見的單分支結構語法是
if語句。
【1】單分支結構
# if 條件:
# 四個空格 代碼
# score = 89
# if score > 90:
# # 這里面的代碼我們稱之為代碼體/代碼塊
# print(f"當前成績為 {score} , 評級為優秀!")
# print(f"111")
# 單分支結構會依次向下執行代碼# 并且在遇到條件時進行判斷,如果條件為真則執行當前代碼提
# 【2】雙分支條件
# if 條件:
# 四個空格 代碼體
# else:
# 四個空格 代碼體
# score = 89
# if score >= 90:
# print(f" {score} 優秀")
# else:
# print("不優秀")
# print(11)
# 雙分支條件:有一個條件做約束,如果當前條件不符合,則會進入到另一個條件的代碼體中
# 【3】多分支
# 90 80 70 70以下
# 優秀 良好 及格 不及格
# if 條件:
# 四個空格 代碼體
# elif 條件:
# 四個空格 代碼體
# elif 條件:
# 四個空格 代碼體
# elif 條件:
# 四個空格 代碼體
# else:
# 四個空格 代碼體
score = 69
if score >= 90:
print(f"{score} :>>>> 優秀")
elif score >= 80:
print(f"{score} :>>>> 良好")
elif score >= 70:
print(f"{score} :>>>> 及格")
else:
if score >= 60:
print(f"差及格還有一丟丟")
else:
print(f"{score} :>>>> 不及格")
【3】循環結構(while)
# 循環結構
# 一個條件不符合我當前狀態的時候我可能還會二次判斷
# 密碼嘗試上 可以進行多次密碼的嘗試
# while 條件(循環截止的條件):
# 代碼體
# 達到某個條件的時候想結束當前循環
# continue
# 結束整個循環
# break
# while True:
# score = int(input("請輸入成績:》》》》"))
# if score >= 90:
# print(f"優秀")
# else:
# print(f"不及格")
count = 0
while count <=9:
count += 1
if count == 1:
print("這是 1 ")
elif count == 3:
print("這是 3 ")
# 結束本次循環
continue # 走到continue 以后就不會繼續鄉下執行代碼,而是回到了 while 條件重新進入當前循環
elif count == 5:
print(f"這是 :>>> {count}")
break # 類似于程序出現錯誤直接將當前程序打斷
print(count)
# 做登錄的三次嘗試
user = {"username": "song","password":"123"}
username = user["username"]
password = user["password"]
count = 0
while count < 3:
username_input = input("輸入用戶名:")
password_input = input("輸入密碼: ")
if username_input == username and password_input == password:
print("登錄成功")
break
else:
count = count + 1
print("登錄錯誤 你還剩下次機會",(3 - count),"次機會")
print(count)
練習題
# 練習題:
# 前提:創建一個字典存了用戶的用戶名和密碼
# 有一個輸入框輸入用戶名和密碼
# 有了用戶名以后去去字典中查密碼
# 有了用戶名但是字典中不存在的情況,打印當前用戶名不存在
# 將字典中的密碼和輸入的密碼進行比對
# 一致打印登陸成功
# 否則提示登錄失敗
user = {"username": "song","password":"123"}
username = user["username"]
password = user["password"]
count = 0
while count < 3:
username_input = input("輸入用戶名:")
password_input = input("輸入密碼: ")
if username_input == username and password_input == password:
print("登錄成功")
break
else:
count = count + 1
print("登錄錯誤 你還剩下次機會",(3 - count),"次機會")
print(count)
# 【1】定義一個字典 ---> 又保存了我們的正確的登錄信息
# {'dream':"521","hope":"369"} ---> 字典取值 --- get()
# {"dream":["dream","521"]} ---> 把列表取出來 --> 在進行解壓賦值
# 【2】兩個輸入框 ---> 輸入用戶名和密碼
# 字符串 ---> 字典中的鍵 ---> 直接根據鍵取值 ---> 成員運算
# 【3】多用戶登錄
# 【3.1】有一個信息字典
# 先判斷有沒有鍵 ---
# 沒有鍵
# 去字典中取出密碼
if not 'dream' in user_dict:
print(f"登錄失敗")
pwd = user_dict.get('key')
# 模擬登錄