1. 程式人生 > 其它 >Python基礎程式設計(2)

Python基礎程式設計(2)

元組(tuple)

1、元組與列表的區別

列表是可變的,元組是不可變的。

列表的可變指的是列表可以新增元素,可以刪除元素,

元組的不可變指的是元組不可以增加新的元素,也不可以刪除已有的元素

2、元組的組成元素

元組裡面的元素可以是字串,也可以是數字, 也可以是元組本身,也可以是列表

3、'count'與'index'

tuple.'count':檢視元組的

tuple.'index':

4、注意事項

當元組裡面只有一個元素時,一定在元素後面加逗號

5、程式設計實訓

1)建立元組

#建立tuple1元組
tuple1=(1,'a',2,1,['Go','Python',(1,2,3,'4')])
#輸出在tuple1中元素[1]的數量
print(tuple1.count(1))
#輸出在tuple1中元素[2]的索引
print(tuple1.index(2))

#執行結果
2
2

2)獲取元組裡面的元素

#獲取元組裡面的元素[Go]
print(tuple1[4][0])
#獲取元組裡面的元素['4']
print(tuple1[4][2][3])

#執行結果
Go
4

3)元組迴圈與判斷

#在tuple1裡,通過enumerate關鍵字,獲取索引與元素
for index,itme in enumerate(tuple1):
	print(index,itme)
#判斷是否有元素[Go],若有,則輸出“學習Go語言”
if index==4 and itme[0]=='Go':
	print('學習Go語言')
    
#執行結果
2
2
Go
4
0 1
1 a
2 2
3 1
4 ['Go', 'Python', (1, 2, 3, '4')]
學習Go語言

Process finished with exit code 0

字典(dict)

1、字典特性

1)字典是無序的

2)字典是key-value的形式來儲存的

2、字典的關鍵字是dict

for example:
      dict1={'name':'zhangli','age':'18','city':'xian'}

3、排序規則

1)如果是數字,預設是從小到大

2)如果是字串,內部處理思路是將字串轉為數字,然後和1的規則相同

3)如果是多個字串比如aa,ab,那麼這個時候它的規則是:  

A、aa和ab先比較第一個字串,發現第一個相同,就比較第二個  

B、比較第二個,比如是字串轉為數字,規則與1相同

4、字串轉為數字

把字串轉為數字,使用內部函式是ord( )

5、字典排序

排序必須是相同的資料內型,字典排序使用到的內部函式是sorted( )

6、程式設計實訓

1)建立字典

#建立字典
dict1={'name':'zhangli','age':'18','city':'xian'}
print(dict1)

#執行結果
{'name': 'zhangli', 'age': '18', 'city': 'xian'}

2)獲取key與valus(字典迴圈)

#獲取key
for itme in dict1.keys():
	print(itme)
#獲取valus
for itme in dict1.values():
	print(itme)
#獲取所有的key與valus
for key,valus in dict1.items():
	print(key,valus)
    
#執行結果
name
age
city
zhangli
18
xian
name zhangli
age 18
city xian

Process finished with exit code 0

3)獲取valus的值

通常使用第二種方法

#獲取valus的值
print(dict1.get('age'))
print(dict1['age'])

#執行結果
18
18

4)兩個字典合併

#兩個字典合併
dict2={'name':'zhangli','age':'18','city':'xian'}
dict3={'valary':'1800'}
dict2.update(dict3)
print(dict2)

#執行結果
{'name': 'zhangli', 'age': '18', 'city': 'xian', 'valary': '1800'}

5)字典排序

#字典排序
dict4={'name': 'zhangli', 'age': '18', 'city': 'xian', 'valary': '1800'}
print(
	dict(
		sorted(dict4.items(),key=lambda item:itme[0])
)
)
print(
	dict(
		sorted(dict4.items(),key=lambda item:item[1])
	)
)

#執行結果
{'name': 'zhangli', 'age': '18', 'city': 'xian', 'valary': '1800'}
{'age': '18', 'valary': '1800', 'city': 'xian', 'name': 'zhangli'}

6)實現字典的有序

#從collections中匯入OrderedDict類
from collections import OrderedDict

dict10=OrderedDict()
dict10['name']='zhangli'
dict10['sex']='男'
dict10['school']='一般學校'
print(dict(dict10))

#執行結果
{'name': 'zhangli', 'sex': '男', 'school': '一般學校'}

資料轉換

1、字串與列表的轉換

#字串轉換位列表
str1='go,java,python'
str_list=str1.split()
print(str_list)
#列表轉換為字串
list_str=','.join(str_list)
print(list_str)

#執行結果
['go,java,python']
go,java,python

2、列表與元組的轉換

#列表轉換為元組
list1=['go,java,python']
list_tuple=tuple(list1)
print(list_tuple)
#元組轉換為列表
tuple_list=list(list_tuple)
print(tuple_list)

#執行結果
('go,java,python',)
['go,java,python']

3、字串與整形的轉換

#字串轉換為整形
age='18'
salary='1800'
age1=int(age)
salary1=int(salary)
print(type(age1),age1)
print(type(salary1),salary)
#整形轉換為字串
age2=str(age1)
salary2=str(salary1)
print(type(age2),age2)
print(type(salary2),salary2)

#執行結果
<class 'int'> 18
<class 'int'> 1800
<class 'str'> 18
<class 'str'> 1800

4、列表與字典的轉換

#列表轉換為字典
list2=['a','b','c']
list_dict=dict(enumerate(list2))
print(list_dict)
#字典轉換為列表
dict_list=list(list_dict.items())
print(dict_list)

#執行結果
{0: 'a', 1: 'b', 2: 'c'}
[(0, 'a'), (1, 'b'), (2, 'c')]

檔案操作

1、檔案操作

檔案操作又名IO操作,其主要包括讀與寫兩個操作

2、函式的特性

函式特點: 函式有引數    x=f(y)--->y是函式f的引數

3、檔案操作三個步驟

1)開啟檔案(open)

2)操作檔案(write)【針對檔案的讀與寫】

3)關閉檔案(close)【檔案必須關閉,否則會出現記憶體洩露】

4、open函式引數

1)open函式
     作用:IO操作檔案
     引數:
            file:指的是被操作的檔案(預設有路徑)
            mode:通過什麼方式操作檔案(讀還是寫?)
                      a:追加
                      w:寫檔案內容(替換寫入)
                      r:讀取檔案內容
            encoding:編碼(utf-8,gbk)
     寫的操作:
           1、不管是否有檔案,即使沒有檔案,open內部會自動建立一個檔案,
                然後把寫的內容寫進去
     讀的操作
           1、檔案存在,那麼從檔案中讀取資料
           2、檔案不存在,會報【FileNotFoundError】的錯誤資訊
                如: [Errno 2] No such file or directory: 'acd.docx'
     with上下文:with open() as f:
           他內部可以對檔案進行關閉,這樣避免了操作檔案忘記關閉

5、實訓程式設計

1)寫:wirte

#在檔案中寫入“hello Python”
f=open(file='login.txt',mode='w',encoding='utf-8')
f.write('hello Python!')
f.close()
#刪除檔案原有內容,重新寫入“Spark”
f=open(file='login.txt',mode='w',encoding='utf-8')
f.write('Spark')
f.close()
#寫入多行內容
f=open(file='login.txt',mode='w',encoding='utf-8')
data='''
hadoop
spark
hive
hbase
flink
kafka
'''
#輸出讀取內容,並取消空格(strip)
f.writelines(data.strip())
f.close()

2)讀:read

#讀取檔案裡面所有內容
f=open(file='login.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()
#讀取檔案裡面第一條內容
f=open(file='login.txt',mode='r',encoding='utf-8')
print(f.readline())
f.close()
#按行讀取檔案所有內容
f=open(file='login.txt',mode='r',encoding='utf-8')
for item in f.readlines():
#輸出讀取內容,並取消空格(strip)
	print(item.strip())
f.close()
#在非預設路徑下讀取檔案內容
f=open(file='D:/admin.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()

 3)with上下文

格式:with open() as f:

#with上下文
with open(file='D:/admin.txt',mode='r',encoding='utf-8') as f:
	print(f.read())

函式

1、定義

所謂函式,就是把重複的程式碼單獨的分離出來,放在⼀個公共的地⽅,

以後可以⼀直的進⾏調⽤,這樣就可以解決多次重複來編寫。

2、關鍵字

函式定義的關鍵字:def

for example:
    def 函式名稱(函式的引數):
        函式表示式

3、函式呼叫

函式寫完後,必須要經過呼叫才可以生效,如果不呼叫,不會生效

呼叫函式的方式是:函式名稱

4、引數分類

1)形式引數:函式裡面的引數叫形式引數

2)實際引數:函式被呼叫的時候,給予引數賦予的值叫實際引數

3)預設引數:在定義函式的時候給形式引數指定了引數的值

4)動態引數:定義一個函式的時候,當函式的形式引數個數不確定,資料型別不確定的時候

5、引數呼叫注意事項

1)函式在呼叫的時候,可以填寫形式引數,也可以不填寫。

2)要麼填寫,要不都不填寫

3)函式在呼叫的時候,填寫的實際引數要與形式引數的順序、個數保持一致

4)函式有形式引數的時候,呼叫函式必須填寫實際引數

6、動態引數

*:代表的是元組的資料型別

**:代表的是字典的資料型別

7、內部函式

關鍵字

數字轉字母:chr;字母轉數字:ord;

包含開始,但不包含結尾:range

8、匿名函式(lambda)

指定一個函式,但是這個函式的名字是可以自定義的 。

for example:
	a=lambda x,y:x+y
    
其中:左邊是函式的形式引數
	:右邊是函式的表示式

9、過濾函式(filter)

一共三種方式:普通過濾,過濾,匿名過濾

10、迭代增加(map)

針對所有物件做同樣的操作

使用前提:1、函式物件 ;2、可迭代的物件

11、函式返回值(return)

一個函式,不管是否有return,它都有返回值的,如果沒有return,它的返回值是None

如果有return,函式的返回值是return後面的內容,切記:return後面的程式碼是不能執行的

函式返回值的價值是:把函式與函式能夠建立一層關聯關係

12、實訓程式設計

1)定義函式

#定義函式,填寫形式引數
def add(a,b):
	print(a+b)
#給予引數賦值(實際引數)
add(3,6)

#定義函式,填寫預設引數
def login(username="admin",password="message"):
	print(username+","+password)
#執行函式
login()

#定義函式,填寫動態引數
def func(*args,**kwargs):
	print(*args,**kwargs)
func({'name','zhangli'})

#執行結果
9
admin,message
{'name', 'zhangli'}

2)登入賬戶

#登入賬戶
def login(username,password):
	if username=='zhangli' and password=='123456':
		print('登入成功')
	else:
		print('登入失敗')

login(username='zhangli',password='123456')

#執行結果
登入成功

3)註冊賬戶,並讀取至檔案

#註冊賬戶
def registry():
	username=input('請輸入使用者名稱:\n')
	password=input('請輸入密碼:\n')
	temp=username+','+password
	with open('login.txt','w') as f:
		f.write(temp)
registry()

#執行結果
1)建立了login.txt檔案,且顯示zhangli,123456
2)執行結果欄結果:
   請輸入使用者名稱:
   zhangli
   請輸入密碼:
   123456

4)讀取內容到檔案

寫一個函式,將註冊的賬號讀取後,寫入login.txt檔案裡,並單獨輸出使用者名稱

def registry():
	with open('login.txt','r') as f:
		acd=f.read().split(',')
		print(acd[0])
registry()

def registry():
	with open('login.txt','r') as f:
		for item in f.readlines():
			print(item.split(',')[0])
registry()

#執行結果
zhangli
zhangli

5)動態引數

#輸入元組資料
def func(*args):
	print(args)
	print(type(args))

func([1,2,3])
func((1,2))
func({'name','zhangli'})

#輸入字典資料
def func(**kwargs):
	print(kwargs)
	print(type(kwargs))

func(name='zhangli',age=18)
func(**{'name':'age'})
#使用場景
def func(*args,**kwargs):
	print(kwargs)

func(payType='alipay',price=100)
func(payType='wxpay')
func(payType='zhaohang',price=100,city='xian')

def func(*args,**kwargs):
	print(kwargs)

func(payType='alipay',price=100)
func(payType='wxpay')
func(payType='zhaohang',price=100,city='xian')

6)內部函式

#數字轉字母(chr)
print(chr(98))

#字母轉數字(ord)
print(ord('d'))

#包含開始,但不包含結尾(range)
for item in range(1,5):
	print(item)
#匯入(import)
import random#內部庫,庫都是需要匯入,匯入關鍵字為import
print(random.randint(1,100))#隨機生成數字(5個)

#字串轉為字串(eval)
str1='5+5'
print(eval(str1))

#執行函式
b

100

1
2
3
4
24

10

 7)驗證碼生成(隨機生成)

list1=[]
#隨機迴圈生成10個數字
for i in range(10):
#在(97,120)之間隨機取數,並放入變數r中;前提條件:生成10個數
	r=random.randint(97,120)
#將變數寫入列表中,且將數字轉換為字母
	list1.append(chr(r))
#將數字轉換為字串,並輸出
print(''.join(list1))

#dgawdqxiud

8)匿名函式(lambda)

a=lambda x,y:x*y
print(a(4,5))

#執行結果
20

9)過濾大於2的數字(過濾函式)

#普通方法
list2=[1,2,3,4,5,6,7,8,9]
list3=[]
def func():
	for item in list2:
		if item>2:
			list3.append(item)
	print(list3)

func()

#過濾(filter)
list2=[1,2,3,4,5,6,7,8,9]
def func(a):
	if a>2:
		return True

print(
	list(filter(func,list2))
)


#過濾(filter加lambda)
list2=[1,2,3,4,5,6,7,8,9]
print(
	list(filter(lambda x:x>2,list2))
)

#執行結果
[3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]

10)對各個變數加10

#map迭增方法
list2=[1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x+10,list2)))

#for迴圈方法
list4=[]
def func():
	for item in list2:
		list4.append(item+10)
	print(list4)
func()

#執行結果
[11, 12, 13, 14, 15, 16, 17, 18, 19]
[11, 12, 13, 14, 15, 16, 17, 18, 19]

11)登入返回sessionid

#登入返回sessionid
def zhihulogin(username='zhangli',password='admin'):
	if username=='zhangli' and password=='admin':
		return 'we456ertre'
	else:
		return"賬戶或密碼不對"

#判斷返回的sessionid引數是否與客戶端sessionid一致
def profile(sessionid):
	if sessionid=='we456ertre':
		print("歡迎檢視知乎主頁")
	else:
		print("請登入!")

#若想登入成功,必須滿足賬戶與密碼正確,因此預設引數和實際引數必須為正確的賬戶與密碼
profile(sessionid=zhihulogin())
profile(sessionid=zhihulogin('zhangli','admin'))
profile(sessionid=zhihulogin('zl,admin'))
profile(sessionid=zhihulogin('we456ertre'))

#執行結果
歡迎檢視知乎主頁
歡迎檢視知乎主頁
請登入!
請登入!

全域性變數與區域性變數

1、定義

全域性變數:在一個python檔案中定義的變數

區域性變數:在一個函式中定義的變數

2、優先順序

1)在python檔案中,呼叫變數,全域性變數優先順序是高於區域性變數的

2)在函式內部呼叫變數,區域性變數的優先順序是高於全域性變數的

3)如果在函式內部想引用全域性變數,那麼使用關鍵字global

#在python檔案中,呼叫變數,全域性變數優先順序是高於區域性變數的
name='無涯'
def func():
	name='wuya'
print(name)

#在函式內部呼叫變數,區域性變數的優先順序是高於全域性變數的
name='無涯'
def func():
	name='wuya'
	print(name)
func()

#如果在函式內部想引用全域性變數,那麼使用關鍵字global
name='無涯'
def func():
	global name
	print(name)
func()

#執行結果
無涯
wuya
無涯

模組與包

1、在python中,每一個python檔案都是一個模組(modyle)

2、包:在一個包裡面會很多的模組

3、包與資料夾的區別:包裡面有_init_.py檔案;資料夾沒有

4、一個模組呼叫另一個模組檔案的變數以及函式:form package.module import *(代表所有)

for example:

#呼叫login.txt,輸出login所有內容
from login.f1 import *

print(name)
func()