debug補充、員工管理系統、字元編碼、檔案操作

吳仁耀發表於2023-02-22

一、debug補充

在當前行的程式碼左側點選一下,會出現一個紅點(打斷點)
image
在程式碼編輯區域右鍵選擇debug,不要在選擇run
image

二、員工管理系統

# 建立大列表
staff_info_list = []
# 定義全域性標誌位
flag = True
# 迴圈列印資訊
while flag:
    print("""
    1.新增員工資訊
    2.檢視員工資訊
    3.刪除員工資訊
    4.退出系統
    """)
    # 獲取輸入的編號
    choice_num = input('請輸入您想要選擇的功能編號>>>:').strip()
    # 判斷是否是純數字
    if not choice_num.isdigit():
        print('編號必須是純數字')
        continue
    if choice_num == '1':
        staff_number = input('請輸入員工編號>>>:').strip()
        # 迴圈遍歷出字典
        for personage_data in staff_info_list:
            # 判斷編號是否存在
            if personage_data.get('num') == staff_number:
                print(f'編號是{staff_number}的員工已存在')
                break
        else:
            username = input('請輸入員工姓名>>>:').strip()
            staff_age = input('請輸入員工年齡>>>:').strip()
            salary = input('請輸入員工薪資>>>:').strip()
            staff_hobby = input('請輸入員工愛好>>>:').strip()
            # 建立字典儲存個人資訊
            staff_data_dict = {}
            # 將個人資訊寫入字典中
            staff_data_dict['num'] = staff_number
            staff_data_dict['name'] = username
            staff_data_dict['age'] = staff_age
            staff_data_dict['pay'] = salary
            staff_data_dict['hobby'] = staff_hobby
            # 將字典寫入大列表中
            staff_info_list.append(staff_data_dict)
            print(f'當前員工{username}新增成功')
    elif choice_num == '2':
        print('檢視員工資訊')
        # 迴圈列印列表中的字典用格式化輸出展示出來
        for data in staff_info_list:
            print(f"""
            ~~~~~~~~user info {data.get('name')}~~~~~~~~~
            編號:{data.get('num')}
            姓名:{data.get('name')}
            年齡:{data.get('age')}
            薪資:{data.get('pay')}
            愛好:{data.get('hobby')}
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            """)
    elif choice_num == '3':
        print('刪除員工資訊')
        # 獲取員工編號
        number = input('請輸入您想要刪除的員工編號>>>:').strip()
        # 定義計數器(索引)
        indexes = 0
        # 迴圈大列表中的字典
        for data in staff_info_list:
            # 用字典中的編號和輸入的編號做比較
            if data.get('num') == number:
                # 索引刪除員工資訊
                del staff_info_list[indexes]
                print(f'編號{number}的員工刪除成功')
                break
            # 索引加一
            else:
                indexes += 1
        else:
            print('編號不存在')
    elif choice_num == '4':
        print('退出系統')
        # 修改全域性標誌位
        flag = False
    else:
        print('暫無該功能編號')

三、字元編碼

(1)、概念

  • 我們在計算機中經常見到的文字、數字、英文字母、圖片、影片、音訊等,這些資訊在計算機中都是以二進位制的形式儲存的,因為記憶體條是電子元器件組成的,它們只有高電平低電平兩種狀態,即0和1兩個值,這個翻譯本叫做字元編碼表。

(2)、字元編碼的發展史

# 1.一家獨大
	計算機是由美國人發明的 為了能夠讓計算機識別英文
	需要發明一個數字跟英文字母的對應關係
	ASCII碼:記錄了英文字母跟數字的對應關係
	用8bit(1位元組)來表示一個英文字元

# 2.群雄割據
	中國人
		GBK碼:記錄了英文、中文與數字的對應關係
 		用至少16bit(2位元組)來表示一箇中文字元
		很多生僻字還需要使用更多的位元組
		英文還是用8bit(1位元組)來表示
	日本人
		shift_JIS碼:記錄了英文、日文與數字的對應關係
	韓國人
		Euc_kr碼:記錄了英文、韓文與數字的對應關係
"""
每個國家的計算機使用的都是自己定製的編碼本
不同國家的文字資料無法直接互動 會出現"亂碼"
"""
# 3.天下一統
	unicode萬國碼
	相容所有國家語言字元
	起步就是兩個位元組來表示字元 
# utf系列:utf8 utf16 ...
	專門用於最佳化unocide儲存問題
	英文還是採用一個位元組 中文三個位元組
表示字元 十六進位制形式 十進位制形式
0~9 0x30~0x39 48~57
A~Z 0x41~0x5A 65~90
a~z 0x61~0x7A 97~122

(3)、字元編碼的使用

# 1. 如何解決亂碼問題?
	文字檔案使用什麼字元編碼儲存,開啟的時候就要使用對應的字元編碼
# 2. python直譯器版本不同帶來的差異
	# python2 直譯器使用的字元編碼還是ASCII表
	# python3 使用的是utf8編碼
# 3. 新增檔案模板
	settings
    	Editor
        	File and code template
            	python script
# 4. 編碼與解碼(核心)
	# 編碼:
		將人類能夠讀懂的語言轉為計算機能夠讀懂的語言

# bytes 位元組,看成是二進位制
	s1 = ss.encode('utf8')
	print(s1, type(s1)) # b'\xb3\xc3\xc4\xea\xc7\xe1\xa3\xac\xd1\xa7\xbc\xbc\xc4\xdc\xa3\xac\xd1\xf8\xbb\xee\xd7\xd4\xbc\xba'
	# 解碼:
		將計算機能夠讀懂的語言轉為人類能夠讀懂的語言
	print(s1.decode('utf8'))
	s = b'kevin123' # 只有英文字元和數字,要想編碼的話,直接使用字首b
	print(s.encode('utf8'))

四、檔案操作

(1)、概念講解

  • 首先我們要知道檔案是作業系統暴露給使用者的快捷方式,當我們使用的時候只需要雙擊就能將檔案讀取到記憶體中執行,使用ctrl+s就可以將檔案儲存到硬碟中,這些對檔案進行修改或使用的動作就是檔案操作,除了藉助作業系統,我們可以使用python程式碼進行這一系列的操作

image

(2)、透過程式碼開啟檔案的兩種方式

# 方式一:
	f=open(檔案路徑,檔案讀寫模式,encoding='檔案編碼型別(預設情況下為utf8)')
	f.close()
"""
特點:一次只能開啟一個檔案,使用完檔案後需要輸入f.close關閉檔案,但是如果忘記關閉檔案並不會有提示
"""

# 方法二:
	with open(檔案路徑,檔案讀寫模式,encoding='檔案編碼型別(預設情況下為utf8)') as f1,open(檔案路徑,檔案讀寫模式,encoding='檔案編碼型別(預設情況下為utf8)') as f2:
	with條件下的操作程式碼
"""
特點:當我們使用with方法開啟檔案的時候,可以一次性開啟多個檔案並且不需要輸入close方法,會自動執行close方法
"""
# 檔案的型別:txt word excel py

 # 1. 開啟檔案
# open('檔案路徑', 'r', '字元編碼')

f=open('a.txt', 'r', encoding='utf-8')
# print(f)  # <_io.TextIOWrapper name='a.txt' mode='r' encoding='utf8'>  檔案控制程式碼
print(f.read())
f.close()  # 關閉檔案

"""
	語法格式:
		open('檔案路徑', '讀寫模式', '字元編碼')
"""

# r的作用
'''當路徑中可能存在有轉移的字元時,字串前面加上r來解決轉義的問題'''
r'D:\python25\day09\a.txt'

(3)、檔案的讀寫模式

1. r  >>> read: 只讀 # 只能讀,不能寫
2. w  >>> write:只寫 # 只能寫,不能讀
3. a  >>> append: 追加
# 讀寫模式
# 1. r
# 路徑不存在,直接報錯
# with open(r'a.txt', 'r', encoding='utf-8') as f:
#     print(f.read())


# 2. w
# 如果路徑不存在,會新建一個檔案出來
# with open('b.txt', 'w', encoding='utf-8') as f:
#     pass

# 1. 會先清空檔案中得內容 2. 在進行寫內容
'''寫檔案的是一定要小心,它會清空檔案的'''
with open('a.txt', 'w', encoding='utf-8') as f:
    f.write('oldboy\n')
    f.write('oldboy\n')
    f.write('oldboy\n')
    f.write('oldboy\n')
    f.write('oldboy\n')

# a:追加模式
# 路徑不存在的時候,也會新建一個檔案出來
# with open('a.txt', 'a', encoding='utf-8') as f:
#     f.write('oldgirl\n')

相關文章