python字典與函式
阿新 • • 發佈:2019-02-06
字典
一、定義
d=dict(a=2,b='hello') ##直接定義賦值
d={}.fromkeys() ##採用fromkeys函式定義
列印模組pprint,使輸出更美觀
# import pprint ##匯入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列印結果
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.使用者登陸優化:
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