Python基礎知識-05-數據類型總結字典

 

python其餘知識目錄html

 

一、一道題,選擇商品的序號。程序員和用戶各自面對的序號起始值

若有變量 googs = ['汽車','飛機','火箭'] 提示用戶可供選擇的商品:python

0,汽車
1,飛機
2,火箭
用戶輸入索引後,將指定商品的內容拼接打印,如:用戶輸入0,則打印 您選擇的商品是汽車。git

goods=["汽車","飛機","大炮"]
for i in range(0,len(goods)):
    print(i,goods[i])
num=input("請輸入要選擇的商品序號:")
num=int(num)
text="您選擇的產品是:%s"%(goods[num])
print(text)
-------------結果:
0 汽車
1 飛機
2 大炮
請輸入要選擇的商品序號:0
您選擇的產品是:汽車

變形:
1,汽車
2,飛機
3,火箭
用戶輸入索引後,將指定商品的內容拼接打印,如:用戶輸入1,則打印 您選擇的商品是汽車程序員

goods=["汽車","飛機","大炮"]
for i in range(0,len(goods)):            #索引是從0開始
    print(i+1,goods[i])                  #用戶看的數字,索引+1顯示
num=input("請輸入要選擇的商品序號:")    #用戶輸入的是看的數字,作索引要-1
num=int(num)-1
text="您選擇的產品是:%s"%(goods[num])
print(text)
------------結果:
1 汽車
2 飛機
3 大炮
請輸入要選擇的商品序號:1
您選擇的產品是:汽車

不改變原代碼,插入一個數字實現的思想web

goods=["汽車","飛機","大炮"]
goods.insert(0,"0")               #列表前面插入一個字符
for i in range(1,len(goods)):      #索引從1開始
    print(i,goods[i])
num=input("請輸入要選擇的商品序號:")
num=int(num)
text="您選擇的產品是:%s"%(goods[num])
print(text)
----------------結果:
1 汽車
2 飛機
3 大炮
請輸入要選擇的商品序號:1
您選擇的產品是:汽車

二、#1,(1)(1,)()之間類型的區別

v1=1
v2=(1)
v3=(1,)
v4=()
print(type(v1),type(2),type(v3),type(v4))
------------結果:
<class 'int'> <class 'int'> <class 'tuple'> <class 'tuple'>
# 元組記得加逗號。小括號是元組,小括號只有一個數是數字,小括號一個數字加個逗號纔是元組。 
[(1),(2),(3)]等價於[1,2,3],

 三、數據類型總結:

int
 py2/py3
 除法
 強制轉換:
  int('字符串') 【重要】
  int(布爾值)
bool
 強制轉換:
  bool(整數) -> bool(1)/.. -> bool(0)
  bool(字符串) -> bool('xx') --> bool("")
  bool(列表) -> bool([]) --> bool([])
  bool(元組) -> bool(()) --> bool(空元組)
   v1 = bool(0)
   v2 = bool("")
   v3 = bool([])
   v4 = bool(())
   print(v1,v2,v3,v4) # False
str
 獨有功能:upper/lower/split/strip/replace/isdigit/startswith/endswith/format/join/encode
 公共公共:
  len
  索引
  切片
  步長
  for循環
  刪除【無】
  更新【無】
 強制轉換:
  str(999) # "999"
  str(True) # "True"
  str(["唐開發",'李忠偉']) # "["唐開發",'李忠偉']" --> v2 = "".join(["唐開發",'李忠偉'])
  str(["唐開發",'李忠偉'])
list
 獨有功能:append/insert/pop/remove/clear/ extend
 公共功能:
  len
  索引
  切片
  步長
  for循環
  刪除
  更新
 強制轉換:
  list("asdfadfasfdadfasfd")
   v1 = list("asdfadfasfdadfasfd")
   print(v1)
  list( (11,22,33,44,) )
   v1 = list( (11,22,33,44,) )
   print(v1)
tuple
 獨有功能【無】
 公共功能:
  len
  索引
  切片
  步長
  for循環
  刪除【無】
  更新【無】
 強制轉換:
  tuple('adfadfasdfasdfasdfafd')
   tuple([11,22,33,44])
   v1 = list("asdfadfasfdadfasfd")
  print(v1)
  v1 = list( (11,22,33,44,) )
  print(v1)
  v1 = tuple('adfadfasdfasdfasdfafd')
  print(v1)
總結
常見的類型轉換
 # 字符串轉數字
 # 數字轉字符串
 # 列表轉元組
 # 元組轉列表
 # 其餘轉bool時,只有:0 「」 [] ()app

 

四、#字符串是數字且有空格,先去掉空格才能int()#

li=[" 8 ","  12  "]
mcw=li[0]+li[1]
mcw2=int(li[0])+int(li[1])
mcw3=int("  5  ")+int(" 11  ")
mcw4=int("      12       ")
print(mcw)
print(mcw2,mcw3,mcw4)
--------------結果:
 8   12  
20 16 12

結論:字符類型的數字帶有空格時,使用int()函數轉化爲數字時無需提早去空格。由上可得,轉化的過ide

程中應該是作了去空格的操做了。函數

五、字典:


http://www.runoob.com/python/python-dictionary.htmlpost

5.1字典簡單理解

字典是另外一種可變容器模型,且可存儲任意類型對象。url

字典的每一個鍵值 key=>value 對用冒號 : 分割,每一個鍵值對之間用逗號 , 分割,整個字典包括在花括號 {} 中 ,格式以下所示:

d = {key1 : value1, key2 : value2 }

鍵通常是惟一的,若是重複最後的一個鍵值對會替換前面的,值不須要惟一。

>>>dict = {'a': 1, 'b': 2, 'b': '3'} >>> dict['b'] '3' >>> dict {'a': 1, 'b': '3'}

值能夠取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。

一個簡單的字典實例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

也可如此建立字典:

dict1 = { 'abc': 456 } dict2 = { 'abc': 123, 98.6: 37 }

 

5.四、#添加鍵值對以及定義空字典添加鍵值對,update (增)

dic={}
dic["name"]="mcw"
dic["age"]=18
print(dic)
------------結果:
{'name': 'mcw', 'age': 18}
#原有字典.update(另外一個字典) 不存在的鍵添加,存在的鍵覆蓋
userinfo={"username":"mcw","password":123456}
userinfo.update({"age":18,"password":654321})
print(userinfo)
---------------結果:
{'username': 'mcw', 'password': 654321, 'age': 18}

 

5.5#字典刪除元素pop/del(刪)

dic={"name":"mcw","age":18,"hobby":"music"} #pop刪除 dic.pop("hobby") print(dic) -----------結果: {'name': 'mcw', 'age': 18}
#del刪除
userinfo={"username":"mcw","password":123456}
del userinfo["password"]
print(userinfo)
------------------結果:
{'username': 'mcw'}

 

5.3字典的修改:(存在就修改/不存在就增長)(改)

---value 是1 "1"不同的注意

userinfo={"username":"mcw","password":123456} userinfo["username"]="xiaoma" print(userinfo) -------------結果: {'username': 'xiaoma', 'password': 123456}
#多個鍵值修改
userinfo={"username":"mcw","password":123456}
userinfo.update({"username":"xiaoma","password":654321})
print(userinfo)
--------------------結果:
{'username': 'xiaoma', 'password': 654321}

5.二、#取字典元素:(查),

userinfo={"username":"mcw","password":123456}
print(userinfo['username']) #獲取字典中單個鍵的值 print(userinfo.keys()) #keys獲取字典中全部的鍵 print(userinfo.values()) #valuses獲取字典中全部的值 ------結果:
mcw
dict_keys(['username', 'password'])
dict_values(['mcw', 123456])
print(type(userinfo.values()))
---------結果:
<class 'dict_values'>
userinfo={"username":"mcw","password":123456}   #打印整個字典 print(userinfo)
--------------結果:
{'username': 'mcw', 'password': 123456}

userinfo={"username":"mcw","password":123456}
for v1,v2 in userinfo.items(): #items獲取全部的鍵值對 print(v1,v2)
--------------結果:
username mcw
password 123456 for循環默認只循環字典中的鍵 userinfo={"username":"mcw","password":123456}
for i in userinfo:
 print(i)
-------------結果:
username
password

報錯:接收的多了 for item,v in userinfo:
 print(item,v)
--------結果:
for item,v in userinfo:
ValueError: too many values to unpack (expected 2)

#字典.get(鍵)
「字典名["鍵"]」來取沒有的鍵會報錯。

「字典.get(鍵)」、「字典.get(鍵,鍵不存在時的返回值)」一樣能獲取字典的值,字典中沒有這個鍵的時候指定返回的值默認爲none(特殊的數據類型,佔內存空間的,是空的地址轉爲bool爲false)

建議:儘可能用get取字典,這樣能夠對鍵是否存在先作個判斷

userinfo={"username":"mcw","password":123456}
result1=userinfo.get("username")
result2=userinfo.get("age")
print(result1,result2)
---------------結果:
mcw None

使用形式:
result=userinfo.get("")
if result==None:
   print("鍵不存在")

5.五、#字典多行美觀顯示,注意不要忘記逗號

userinfo={
    "username":"mcw",
    "password":123456
}
print(userinfo)
---------結果:
{'username': 'mcw', 'password': 123456}

5.六、#字典和列表嵌套構建用戶登陸的案例

user_list=[]
while True:
    u=input("請輸入用戶:")
    if u=="N":
        break
    p=input("請輸入密碼:")
    v={}
    v["user"]=u
    v["pwd"]=p
    user_list.append(v)
print(user_list)
rec_str1=input("請輸入用戶:")
rec_str2=input("請輸入密碼:")
flag=0
for i in user_list:
    if i["user"]==rec_str1 and i["pwd"]==rec_str2:
        flag=1
if flag==1:
    print("請進行登陸")
else:
    print("登陸失敗!")


完善後:
user_list=[]
while True:
    u=input("請輸入用戶:")
    if u=="N":
        break
    p=input("請輸入密碼:")
    v={}
    v["user"]=u
    v["pwd"]=p
    user_list.append(v)
print(user_list)
rec_str1=input("請輸入用戶:")
rec_str2=input("請輸入密碼:")
message="登陸失敗!"
for i in user_list:
    if i["user"]==rec_str1 and i["pwd"]==rec_str2:
            message="登陸成功!"
            break
print(message)
-----------------結果:
請輸入用戶:mcw
請輸入密碼:123
請輸入用戶:xiaoma
請輸入密碼:123
請輸入用戶:N
[{'user': 'mcw', 'pwd': '123'}, {'user': 'xiaoma', 'pwd': '123'}]
請輸入用戶:mcw
請輸入密碼:123
登陸成功!

5.七、單變量和雙變量接收字典items()返回值


單變量和雙變量接收字典items()返回值,單變量是循環接收字典鍵值對造成的元組,雙變量一個接收鍵
,一個接收值。

---
v="4+3"
a,b=v.split("+")
print(a,b)
------結果:
4 3

v="4+3"
a=v.split("+")
print(a[0],a[1])
------------結果:
4 3

userinfo={"username":"mcw","password":123456}
for i in userinfo.items():
 print(i,type(i))
-------結果:
('username', 'mcw') <class 'tuple'>
('password', 123456) <class 'tuple'>

userinfo={"username":"mcw","password":123456}
for k,v in userinfo.items():
 print(k,v,type(k),type(v))
------------結果:
username mcw <class 'str'> <class 'str'>
password 123456 <class 'str'> <class 'int'>

5.8生成列表中每一個元素都是相同鍵的字典

兩個列表元素,一個當字典的鍵,另外一列表每一個元素都是字典分隔開來的值。合併成列表中有多個字典元素的方法.

li1=["name","age","hobby"]
li2=["mcw,18,study","xiaoma,19,music","yh,10,eat"]
print([[li1[j]+":"+li2[i].split(",")[j] for j in range(0,len(li1))] for i in range(0,len(li2))])
mcw=[{li1[j]:li2[i].split(",")[j] for j in range(0,len(li1))} for i in range(0,len(li2))]
print(mcw)
print(type(mcw[0]))
----------------結果:
[['name:mcw', 'age:18', 'hobby:study'], ['name:xiaoma', 'age:19', 'hobby:music'], ['name:yh', 'age:10', 'hobby:eat']]
[{'name': 'mcw', 'age': '18', 'hobby': 'study'}, {'name': 'xiaoma', 'age': '19', 'hobby': 'music'}, {'name': 'yh', 'age': '10', 'hobby': 'eat'}]
<class 'dict'>

 

===
列表,元組嵌套。加一個字典,嵌套,意義何在呢
int/bool/str list/tuple/dict能夠相互嵌套,

字典值:能放各類 全部都能當
字典鍵 :能夠有:元組,數字,布爾值,字符串
               不能夠:字典,列表 可hash的能夠當key,字典和列表是可變的,不可hash,因此不能當鍵。

#元組 列表有序,字典無序,Python3.6以後字典有序了。

相關文章
相關標籤/搜索