1. 程式人生 > >python的字典與函式

python的字典與函式

字典

一、字典的定義

d=dict(a=2,b='hello')           ##直接定義賦值
d={}.fromkeys()                ##採用fromkeys函式定義

列印模組pprint,使輸出更美觀

import pprint  ##匯入模組
user=[]
for i in range (10):  ##生成user列表中user1 - user10使用者
    user.append('user%d' %(i+1))
pprint.pprint({ }.fromkeys(user.'123456'))  ##賦值所有key值為:123456

二、字典的操作

1.檢視key值對應的value值

print(d['b'])  ##value值存在時,輸出;不存在時,報錯
print(d['f'])
print(d.get('b'))  ##value值存在時,輸出;不存在時,輸出None
print(d.get('f'))

2.指定輸出字典的key、value、key-value

print(d.keys())    ##列印字典中所有的key值
print(d.values())  ##列印字典中所有的value值
print(d.items())   ##列印字典中所有的key-value值對

3.修改字典元素

d['a']=100  ##key存在時,修改對應的value值;不存在時,新增
d['f']=11  

d2=dict(a=110,x=0)  ##key存在時,覆蓋原value值;不存在時,新增
print(d.update(d2))
d.setdefault('a',100)  ##key存在時,不做操作;不存在時,新增
d.setdefault('x',100)

4.遍歷字典

for key,value in d.items():
print(key,value)

5.刪除字典元素

del d['a']  ##key值存在則刪除;不存在則報錯
del d['f']

value=d.pop('a'
) ##key值存在則刪除,返回對應的value值;不存在則報錯 value=d.pop('f') pair=d.popitem() ##隨機刪除,一般是最後一個,返回值為key-value值對 print(d,pair)

6.實現switch,case功能
注意:python不支援switch,case功能,需要用其他方法實現

num1 = int(input('please input a num:'))
choice = input('please make your choice:')
num2 = int(input('please input a num:'))
dict = {       ##實現兩個int數字加減乘除的效果
    '+': num1 + num2,
    '-': num1 - num2,
    '*': num1 * num2,
    '/': num1 / num2,
}
print(dict.get(choice, 'error'))   ##get()函式預設為None

7.列表去重的第二種方法

a=[1,3,4,3,6,1]
print({}.fromkeys(a).keys())  ##拿出字典的key值
##將列表生成字典,相同key值會自動覆蓋,value值預設為none

三、練習

1.生成172.25.254.1~172.25.254.200隨即IP,並統計次數`

import pprint  ##pprint模組,輸出更美觀
import random  ##random模組,生成隨機數

d = {}   ##定義一個空字典
for num in range(200):   ##生成200個隨機數
    ip= '172.25.254.' + str(random.randint(1,200))  ##將int型轉換成str型
    if ip in d:   ##判斷ip是否存在
        d[ip] += 1  ##若存在,則對應的value值加1
    else:
        d[ip] = 1   ##若不存在,則賦值1
pprint.pprint(d)  ##pprint列印結果

操作結果:

{'172.25.254.1': 1,
 '172.25.254.10': 2,
 '172.25.254.100': 1,
 '172.25.254.102': 1,
 '172.25.254.103': 1,
 '172.25.254.104': 1,
 '172.25.254.105': 1,
 '172.25.254.107': 3,
 '172.25.254.108': 1,
 '172.25.254.109': 2,
 ...

2.生成1~200的隨機數,升序排列並統計次數

import pprint
import random
###與練習1不同的是,需要定義隨機數列表並排序
d = {}  ##定義數字儲存的字典
l = []  ##定義隨機數的列表
for num in range(200):   ##生成200個隨機數字
    l.append(random.randint(1,200))
l.sort()  ##對數字列表進行升序排列
for N in l:
    if N in d:
        d[N] += 1
    else:
        d[N ]= 1
pprint.pprint(d) 

操作結果:

{2: 1,
 3: 1,
 5: 1,
 6: 2,
 7: 2,
 9: 2,
 10: 1,
 11: 1,
 12: 4,
 13: 2,
 14: 2,
 ...

3.使用者登陸優化

import pprint##優化的目的:管理系統可以新建、登陸、刪除、檢視使用者資訊等
userdict = {
    'root': 'westos',
    'kiosk': 'redhat'
}
menu = """
        Users Operation
    1).New user
    2).User login
    3).Delete user
    4).View users
    5).exit  
Please input your choice:"""
while 1:  ##採用死迴圈的格式
    choice = input(menu)
    if choice == '1':
        print('New User'.center(30, '*'))
        name = input('please input a username:')
        if name in userdict:  ##判斷使用者是否存在
            print(name + ' is already exist!')
        else:    ##使用者不存在,則在使用者字典中新增使用者資訊
            passwd = input('please set your passwd:')
            userdict[name] = passwd
            print(name + ' is ok!')
    elif choice == '2':
        print('User Login'.center(30, '*'))
        for i in range(3):  ##限制使用者3次登陸機會
            USER = input("please input username:")
            if USER in userdict:  ##判斷登陸使用者是否存在
                PASS = input("please input passwd:")
                if PASS == userdict[USER]:  ##判斷使用者密碼
                    print("Login successfully")
                    break
                else:
                    print("Login failly")
            else:
                print(USER + " is not exist")
                continue
        else:
            print("ERROR:Time is over")
    elif choice == '3':
        print('Del User'.center(30, '*'))
        name = input('please input a username:')
        if name in userdict:  ##刪除前,先判斷使用者是否存在
            del userdict[name]  ##此處可增加限制,密碼匹配方可刪除
            print(name + ' is already deleted!')
        else:
            print(name + ' is not exist!!')
    elif choice == '4':
        print('View User'.center(30, '*'))
        pprint.pprint(userdict)  ##pprint列印使用者資訊
    elif choice == '5':
        print('Exit'.center(30, '*'))
        break
    else:
        print('ERROR!!!')

函式

一、定義函式

1.函式引數:形參

def test(形參):  ##函式名,形參可任意
    pass    ##函式體
    return  ##返回值,預設為none

2.有返回值,可選引數:return關鍵字

def test(*arges):   ##可選引數,表示引數個數不限
    return sum(arges)  ##sum(),求和函式

print(test(1,2))  ##呼叫函式,不會輸出返回值
print(test(1,2,3))  ##只有列印函式執行結果時,會輸出返回值

3.沒有返回值

def test(*arges):
    print(sum(arges))   ##函式體:列印arges的和

test(1,2)     ##執行函式就會有結果(跟函式寫法有關)
test(1,2,3)
test(1,2,3,4,5)

4.預設引數

def test(num,x=2):  ##'=':表示預設引數
     print(num**x)   ##實現:求平方效果

test(2,4)  ##呼叫函式時有引數,則按引數執行

5.關鍵字引數

def test(name,age,**kwargs):   ##'**kwargs':表示關鍵字引數
     print(name,age,kwargs)

test('lee',20,weight=50,tall=174)  ##關鍵字引數,以字典格式儲存

6.引數組合

定義引數的順序必須是:
必選引數、 預設引數、可選引數和關鍵字引數

7.return關鍵字

注意:當函式執行過程遇到return時,後面的程式碼不再執行

8.全域性變數 global

區域性變數: 函式中的變數,只在函式中生效
global: 使區域性變數變成全域性變數

二、練習

1.f(n)為完全平方和公式,給定k,a,b,求a,b之間有多少個n滿足k*f(n)=n

a= int(input('a:'))   ##輸入範圍a,b
b = int(input('b:'))
k = int(input('k:'))  ##指定k值
count = 0    ##計數

def f(n):    ##計算完全平方和
    res = 0
    for i in str(n):  ##強制轉換成字串,遍歷
        res += int(i) ** 2  ##求完全平方和結果
    return res

def isok(num):  ##該函式判斷是否滿足條件
    if k * f(num) == num:  ##符合題目條件,則返回true,否則False
        return True
    else:
        return False

for num in range(a, b + 1):  ##在a、b之間嘗試
    if isok(num):  ##滿足條件,計數+1
        count += 1
print(count)

2.一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

def main(num):  ##定義函式
    for x in range(1000):  ##遍歷1000內的整數
        if x ** 2 == num:  ##當num是完全平方數時,返回True
            return True

for i in range(1000):   ##遍歷1000內的整數
    n1 = i + 100   ##題目要求+100和+168後依然是完全平方數
    n2 = i + 168
    if main(n1) and main(n2):  ##呼叫函式,當n1和n2均成立,i滿足要求
        print(i)

3.使用者管理系統——終極版
要求:使用者新建時,“*“ 提示使用者名稱和密碼必須有,年齡和聯絡方式可不填

import pprint   ##匯入pprint模組,使輸出更美觀

userdict = {      ##使用者資訊字典
    'root': 'westos',
    'kiosk': 'redhat'
}
menu = """    
        Users Operation
    1).New user
    2).User login
    3).Delete user
    4).View users
    5).exit

Please input your choice:"""  ##輸入提示

def log(name, password, **kwargs):   ##log()函式,關鍵字引數
    userdict[name] = (password, kwargs) 
 ##在userdict中新增元素key=name,value=(password, kwargs)

while 1:   ##死迴圈
    choice = input(menu)    ##輸入操作選項
    if choice == '1':
        print('New User'.center(30, '*'))   ##新建使用者
        name = input('please input your *username:')
        if name in userdict:  ##判斷使用者是否存在
            print(name + ' is already exist!')
        else:   ##使用者需輸入密碼、年齡(可選)、郵箱(可選)
            passwd = input('please set your *passwd:')
            age = input('please input your age:')
            mail = input('please input your mail:')
            log(name, passwd, Age=age, Mial=mail)  ##呼叫函式,新增新使用者資訊
            print(name + ' is ok!')   ##返回使用者新增成功
    elif choice == '2':
        print('User Login'.center(30, '*'))   ##登陸介面
        for i in range(3):  ##3次登陸機會
            USER = input("please input username:")
            if USER in userdict:   ##判斷使用者是否存在
                PASS = input("please input passwd:")
                if PASS == userdict[USER]:    ##判斷密碼是否存在
                    print("Login successfully")
                    break
                else:
                    print("Login failly")
            else:
                print(USER + " is not exist")
                continue  ##跳出本次迴圈,繼續執行
        else:
            print("ERROR:Time is over")
    elif choice == '3':    ##刪除使用者
        print('Del User'.center(30, '*'))
        name = input('please input a username:')
        if name in userdict:
            del userdict[name]   ##根據key值刪除userdict中資訊
            print(name + ' is already deleted!')
        else:
            print(name + ' is not exist!!')
    elif choice == '4':   ##檢視使用者資訊
        print('View User'.center(30, '*'))
        pprint.pprint(userdict)   ##可遍歷輸出
    elif choice == '5':
        print('Exit'.center(30, '*'))
        break
    else:
        print('ERROR!!!')

4.給定整數,執行函式Collatz,若該整數為偶數,列印並返回num//2,若為奇數,列印並返回3*num+1

def Collatz(num):   ##定義函式Collatz()
    if num % 2 == 0:    ##判斷num是否為偶數
        print(num // 2)  ##取整
        return num // 2
    else:
        print(3 * num + 1)   ##為奇數時,重新賦值
        return 3 * num + 1

n = int(input('please input an int:'))  ##強制轉換為int型
while 1:
    n = Collatz(n)  ##呼叫函式
    if n == 1:  ##當n為1時滿足要求,退出
        break

相關推薦

python字典函式

字典 一、定義 d=dict(a=2,b='hello') ##直接定義賦值 d={}.fromkeys() ##採用fromkeys函式定義 列印模組pprint,使輸出更美觀 # import pprint ##匯入p

python字典函式

字典 一、字典的定義 d=dict(a=2,b='hello') ##直接定義賦值 d={}.fromkeys() ##採用fromkeys函式定義 列印模組pprint,使輸出更美觀 imp

python字典集合操作

成員 創建 error: 技術分享 blog lap 關系 size pen 字典操作 字典一種key - value 的數據類型,使用就像我們上學用的字典,通過筆劃、字母來查對應頁的詳細內容。 語法: info = { ‘s1‘: "jack",

Python——字典字典方法

-s als 如果 訪問 一個 而不是 操作 不同 清除 字典是一種通過名字或者關鍵字引用的得數據結構,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型,基本的操作包括如下: (1)len():返回字典中鍵—值對的數量; (

Python-字典json的轉換

字典 分層 直接 ads 後綴 轉換 indent 內容 user #json是字符串,只不過長得像字典import jsonuser_info=‘‘‘{"niuhy":1234,"shanbl":44566}‘‘‘#json裏只能是雙引號print(user_info)u

Python字典JSON資料轉換

JSON在python中分別由list和dict組成。 在python中,JSON模組提供以下四個功能, dumps、dump、loads、load。其中dumps把資料型別轉換成字串 dump把資料型別轉換成字串並存儲在檔案中 loads把字串轉換成資料型別 load把檔案開啟從字串轉換成

python字典集合 基礎操作

Python字典* 字典是一個無序的額,可以修改的,元素呈鍵值對的形式,以逗號分隔的額,以大括號包圍的的序列: 字典是python基礎資料型別當中唯一一個對映關係的資料型別: ‘“ 字典的格式 Key:value 鍵值對 變數名={key1:value1,key2:velue2…} 注意:1

python字典建構函式dict(mapping)解析

Python字典的建構函式有三個,dict()、dict(**args)、dict(mapping),其中第一個、第二個建構函式比較好理解也比較容易使用, 而dict(mapping)這個建構函式的使用比較難理解。 1 dict()建構函式可以返回一個空的字典 In [7

Python Dict and File -- python字典檔案讀寫

Python Dict and File – python字典與檔案讀寫 標籤(空格分隔): Python Dict Hash Table Python的雜湊表結構叫做字典。基本形式為key:value的鍵值對的集合,被大括號包圍。string數字

python 字典連結串列的轉換以及字典的排序

1.在寫python程式碼是經常會遇到使用dict與list型別的資料,這兩者有時會進行轉換工作,我的程式碼是:def dict2list(dic:dict): ''' 將字典轉化為列表 ''' keys = dic.keys() vals = dic

python--列表字典

python基礎列表與字典是其他對象類型的集合。一、內置對象---list(列表),可以包含數字、字符串或其他列表。其屬性主要有 1.任意對象的有序集合,列表就是收集其他對象的地方,同時是有位置順序的。 2.通過偏移讀取 3.可變長度、異構和任意嵌套 4

Python算法教程第二章知識點:計時模塊、字典散哈希表、圖樹的實現、成員查詢、插入對象

復雜度 代碼段 程序 ans 數列 imp val 插入對象 string 本文目錄:一、計時模塊;二、字典與散哈希表;三、圖與樹的實現;四、成員查詢;五、插入對象</br>一、計時模塊(timeit、cProfile) import timeit timeit

python 列表字典相互轉換

bubuko 內置函數 sin 技術 for 分享圖片 ima 字符 復數類 1. 2個列表轉換為字典 #encoding=utf-8list1=["a","b","c"]list2=[1,2,3]d={}for i in range(len(list1)): d[l

Python字典(dict)json數據格式的區別和聯系

格式 數據格式 元組 ring 字符 ict 調用 json模塊 png 在學習Python的時候,我們學習到,Python3 的標準數據類型有:   數字(Number)   字符串(String)   列表(List)   元組(Tumple)   集合(Set)   

Python流程控制函式

if >>> x = int(raw_input("Please enter an integer:")) Please enter an integer:42 >>> if x < 0: ... x = 0 ... print "變為0" ...

PYTHON自動化Day6-函式多個返回值和匿名函式、列表生成式,三元運算子,os模組,sys模組,時間模組,字典排序,資料庫操作,加密(md5)

一.函式多個返回值和匿名函式 #函式返回多個值,用一個變數接收 def say(): num1=1 num2=2 num3=3 return num1,num2,num3 res=say() print(res) #打印出來是元組。 函式如果返回多個值的話,會把返回的

python的sorted函式字典按value進行排序

場景:詞頻統計時候,我們往往要對頻率進行排序 sorted(iterable,key,reverse),sorted一共有iterable,key,reverse這三個引數。其中iterable表示可以迭代的物件,例如可以是dict.items()、dict.keys()等,key是一個函式,用來選取參與比

python 002-python基礎列表、字典函式的使用

列表的使用 names=["張三"]; print(names) 新增列表的值 尾部新增 names.append("李四") print(names) 新增列表的值 指定位置新增 names.insert(1,"王五"); print(names) 刪除列表的

Python學習之函式方法的區別

函式和方法嚴格意義上講都是可執行的一個程式碼段,擁有輸入和輸出 在Python中函式為內建的,函式是已經封裝的一些獨立的功能,同時也滿足自建的一些函式。 import keyword print(keyword,kwlist) 則輸出結果為'False', 'None', 'True', '

Python字典中取值函式

在Python中當字典的值是函式時,如果這樣寫fou = {'a':aa(),'b'=bb(),'c':cc()}fou['a']這時函式會全部被執行,其實關鍵在後面的括號,經過多次嘗試把字典裡括號去掉函式是沒有立刻執行的也就是沒有返回函式結果,可去掉字典裡函式的括號打印出fou['a']得到的結果是一個物件