20191218 實驗四《Python程序設計》實驗報告


20191218 2020-2021-2 《Python程序設計》實驗四報告

課程:《Python程序設計》
班級: 1912
姓名: 唐啟恆
學號:20191218
實驗教師:王志強
實驗日期:2021年6月24日
必修/選修: 公選課

一、實驗內容

  • Python綜合應用:爬蟲、數據處理、可視化、機器學習、神經網絡、游戲、網絡安全等。

(1)程序能運行,功能豐富。(需求提交源代碼,並建議錄制程序運行的視頻)10分
(2)綜合實踐報告,要體現實驗分析、設計、實現過程、結果等信息,格式規范,邏輯清晰,結構合理。10分。
(3)在實踐報告中,需要對全課進行總結,並寫課程感想體會、意見和建議等。5分

二、實驗過程

1.網絡爬蟲實戰

需求分析:發送請求獲得返回數據、解析獲得數據、輸出解析后的數據。
需要調用的庫:re、requests。

(1)淘寶網爬蟲

創建函數

需求分析:發送請求獲得返回數據、解析獲得數據、輸出解析后的數據。
需要調用的庫:re、requests。

  • getHTMLText函數:對服務器發送請求並獲得返回數據

      def getHTMLText(url):
      	try:
      		header = {
      			'authority': 's.taobao.com',
      			'cache-control': 'max-age=0',
      			'upgrade-insecure-requests': '1',
      			'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
      			'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
      			'referer': 'https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306',
      			'accept-encoding': 'gzip, deflate, br',
      			'accept-language': 'zh-CN,zh;q=0.9',
      			'cookie': 'cna=of0cFi+PRlkCAXAga/Rh5jS/; thw=cn; miid=1746754052324791774; t=666c0abca91eaba189bedb8dc7cd9af4; cookie2=1eaa7669168b838f207f946a56d6c06e; v=0; _tb_token_=e3e75bafeab75; _samesite_flag_=true; sgcookie=E0CPuRRNCb3UsPzEfu8ez; unb=2201465236169; uc3=id2=UUphy%2FZ8WVQTGEtLSA%3D%3D&nk2=F5RNZTsZefZoa8k%3D&vt3=F8dBxGepHC4UCW39woY%3D&lg2=UIHiLt3xD8xYTw%3D%3D; csg=76e486aa; lgc=tb801621930; cookie17=UUphy%2FZ8WVQTGEtLSA%3D%3D; dnk=tb801621930; skt=5159b705fae0ca1b; existShop=MTU5MDkyNjE3MQ%3D%3D; uc4=id4=0%40U2grEJGD1caelul1pbdrh9%2FZHNY3neYE&nk4=0%40FY4GsvRAzezC4KJ%2F6Fq%2BPUeNQ5BcAA%3D%3D; tracknick=tb801621930; _cc_=UIHiLt3xSw%3D%3D; _l_g_=Ug%3D%3D; sg=09c; _nk_=tb801621930; cookie1=U7Gmn5kRAszHsmIsFcN1Y6rDPBjpuYddw9YlBSNITsY%3D; enc=JDI2YJQr%2Fg4gc0f7829oFezKf9MFrM%2BUlJZ5JBY%2BEdOSe%2B%2FAum2YSuESyxnliSWuHaiCwNzPAjY7BTLPa4m%2FaHJdUFL1HRK3vGT2eEY7UHE%3D; tfstk=cOkVBSbAMKpVkry69-wafcZzA2AfaQUgRTrUiXN6mk92_GVb8sXPWuMlJurNaWNc.; mt=ci=12_1; hng=CN%7Czh-CN%7CCNY%7C156; UM_distinctid=1726a96e2ab3d8-0a6e4de9b0dc43-3a65420e-144000-1726a96e2ac9d1; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; CNZZDATA1277659945=1256986223-1590926173-%7C1590926292; uc1=cookie15=WqG3DMC9VAQiUQ%3D%3D&existShop=false&pas=0&cookie21=Vq8l%2BKCLjA%2Bl&cookie16=URm48syIJ1yk0MX2J7mAAEhTuw%3D%3D&cookie14=UoTV7N%2B0xtxMZQ%3D%3D; JSESSIONID=CB695AD612260F9E44DDD5E96A505328; l=eBSA3l3gqv46Q3ayBOfZourza77OSIRYIuPzaNbMiOCP_7fp51ChWZv0tj89C3GVh6xXR3u14VQeBeYBqQOSnxv92j-la_kmn; isg=BCAgnhN2arDKctWRuj9ghLH78S7yKQTz4pJPapox7DvOlcC_QjnUg_alKT0VHLzL',
      		}
    
      		r = requests.get(url, headers=header)
      		r.raise_for_status()
      		r.encoding = r.apparent_encoding
      		return r.text
      	except:
      		return "F"
    
  • parsePage函數:通過正則表達式對獲得的html文本進行解析,獲得我們想要得到的內容。

      def parsePage(ilt, html):
      	try:
      		plt = re.findall(r'\"view_price\":\"[\d+\.]*\"', html)
      		tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
      		for i in range(len(plt)):
      			price = eval(plt[i].split(':')[1])
      			title = eval(tlt[i].split(':')[1])
      			ilt.append([price, title])
      	except:
      		print("F")
    
  • printGoodsList函數:輸出解析過的內容,同時使用正則表達式對輸出進行格式化。

      def printGoodsList(ilt):
      	tplt = "{:4}\t{:8}\t{:16}"
      	print(tplt.format("序號", "價格", "商品名稱"))
      	count = 0
      	for g in ilt:
      		count = count + 1
      		print(tplt.format(count, g[0], g[1]))
    

其中,頭部Head的設置是為了繞過反爬蟲機制。
在剛開始寫代碼時,程序運行並沒有輸出。檢查請求狀態碼,發現狀態碼為200,能夠正常訪問。查找資料后發現,淘寶網設置了反爬蟲機制,結合上課所學內容,進行了header中代理的仿用戶處理。
image

進行爬蟲
image

(2)京東網爬蟲

創建函數

定義函數抓取每頁前30條商品信息

def crow_first(n):
	# 構造每一頁的url變化
	url = 'https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=' + str(
		2 * n - 1)
	head = {'authority': 'search.jd.com',
			'method': 'GET',
			'path': '/s_new.php?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=4&s=84&scrolling=y&log_id=1529828108.22071&tpl=3_M&show_items=7651927,7367120,7056868,7419252,6001239,5934182,4554969,3893501,7421462,6577495,26480543553,7345757,4483120,6176077,6932795,7336429,5963066,5283387,25722468892,7425622,4768461',
			'scheme': 'https',
			'referer': 'https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=3&s=58&click=0',
			'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
			'x-requested-with': 'XMLHttpRequest',
			'Cookie': 'qrsc=3; pinId=RAGa4xMoVrs; xtest=1210.cf6b6759; ipLocation=%u5E7F%u4E1C; _jrda=5; TrackID=1aUdbc9HHS2MdEzabuYEyED1iDJaLWwBAfGBfyIHJZCLWKfWaB_KHKIMX9Vj9_2wUakxuSLAO9AFtB2U0SsAD-mXIh5rIfuDiSHSNhZcsJvg; shshshfpa=17943c91-d534-104f-a035-6e1719740bb6-1525571955; shshshfpb=2f200f7c5265e4af999b95b20d90e6618559f7251020a80ea1aee61500; cn=0; 3AB9D23F7A4B3C9B=QFOFIDQSIC7TZDQ7U4RPNYNFQN7S26SFCQQGTC3YU5UZQJZUBNPEXMX7O3R7SIRBTTJ72AXC4S3IJ46ESBLTNHD37U; ipLoc-djd=19-1607-3638-3638.608841570; __jdu=930036140; user-key=31a7628c-a9b2-44b0-8147-f10a9e597d6f; areaId=19; __jdv=122270672|direct|-|none|-|1529893590075; PCSYCityID=25; mt_xid=V2_52007VwsQU1xaVVoaSClUA2YLEAdbWk5YSk9MQAA0BBZOVQ0ADwNLGlUAZwQXVQpaAlkvShhcDHsCFU5eXENaGkIZWg5nAyJQbVhiWR9BGlUNZwoWYl1dVF0%3D; __jdc=122270672; shshshfp=72ec41b59960ea9a26956307465948f6; rkv=V0700; __jda=122270672.930036140.-.1529979524.1529984840.85; __jdb=122270672.1.930036140|85.1529984840; shshshsID=f797fbad20f4e576e9c30d1c381ecbb1_1_1529984840145'
			}
	r = requests.get(url, headers=head)
	# 指定編碼方式,不然會出現亂碼
	r.encoding = 'utf-8'
	html1 = etree.HTML(r.text)
	# 定位到每一個商品標簽li
	datas = html1.xpath('//li[contains(@class,"gl-item")]')
	# 將抓取的結果保存到本地CSV文件中
	with open('JD_Phone.csv', 'a', newline='', encoding='utf-8')as f:
		write = csv.writer(f)
		for data in datas:
			p_price = data.xpath('div/div[@class="p-price"]/strong/i/text()')
			p_comment = data.xpath('div/div[5]/strong/a/text()')
			p_name = data.xpath('div/div[@class="p-name p-name-type-2"]/a/em')
			# 這個if判斷用來處理那些價格可以動態切換的商品,比如上文提到的小米MIX2,他們的價格位置在屬性中放了一個最低價
			if len(p_price) == 0:
				p_price = data.xpath('div/div[@class="p-price"]/strong/@data-price')
				# xpath('string(.)')用來解析混夾在幾個標簽中的文本
			write.writerow([p_name[0].xpath('string(.)'), p_price[0], p_comment[0]])
	f.close()

定義函數抓取每頁后30條商品信息

def crow_last(n):
	# 獲取當前的Unix時間戳,並且保留小數點后5位
	a = time.time()
	b = '%.5f' % a
	url = 'https://search.jd.com/s_new.php?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=' + str(
		2 * n) + '&s=' + str(48 * n - 20) + '&scrolling=y&log_id=' + str(b)
	head = {
		'authority': 'search.jd.com',
		'cache-control': 'max-age=0',
		'upgrade-insecure-requests': '1',
		'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
		'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
		'referer': 'https://www.jd.com/',
		'accept-encoding': 'gzip, deflate, br',
		'accept-language': 'zh-CN,zh;q=0.9',
		'cookie': '__jdu=2047103149; shshshfpa=16ae8f53-5ae1-9de0-0ec7-d606fd429b8b-1571133416; shshshfpb=pYrZgLCdz5oFhuEIhY2v4Zw%3D%3D; qrsc=3; __jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1590926787595; areaId=14; ipLoc-djd=14-1116-3433-0; rkv=V0500; UM_distinctid=1726aa0663582-03d3560bee40c-3a65420e-144000-1726aa06636233; TrackID=1Fkw1M1_Um8z4aZxzM88PaVrfa1NclrA5-Pp_oUv0QoGkQJsAuQx_mlrVK1jb-Hz3blG4lWBHe27qqvbdEe8mEpk3jKUxnzcTLHVVokp69gA; thor=3B3B94FCFFD97861EC4C84D7B4E9034099196D8E6BE2C0ED4523496131EFDDEEED2430BF573FA2C70A575F172968BC1D7BBD1E6A3D7102679C1ADEEEAA9FE084385F1BACFB82ADBB33C28559B3B8B60D0EFCC5D00234F976A6362CCB6DC3ED3817CFF1AAA7E47A87189B77281897EB3E44F2F3BF77CD5FB4D0153D05B69D0E9CD7968F837A3A84E42F389C3CC06275A13682D4F2460474EE85DC2A5907A93452; pinId=51UPJKKWueTfOBEKj6YZyw; pin=jd_UcBGwTpLaHLW; unick=jd_UcBGwTpLaHLW; ceshi3.com=000; _tp=yzNUSmC8aRtAFY8ILrHooA%3D%3D; _pst=jd_UcBGwTpLaHLW; shshshfp=9d38b151fe2b761e0c3a4fb78c195c2e; __jda=122270672.2047103149.1571133379.1586011436.1590926788.9; __jdb=122270672.8.2047103149|9.1590926788; __jdc=122270672; shshshsID=e446e3a630a5a9d9aeae1b61e2ce2641_6_1590927979367; CNZZDATA1277659945=2059356410-1590926797-https%253A%252F%252Fwww.jd.com%252F%7C1590927980; 3AB9D23F7A4B3C9B=7FX6VP23LCI5I6DXXAO64CHVLKIH6WDXMGJUDIUAB3PGKODGHZXKQUSISB62YVTTU2C7OEMI5KN4ZQSALB3UY6MC3I',
	}
	r = requests.get(url, headers=head)
	r.encoding = 'utf-8'
	html1 = etree.HTML(r.text)
	datas = html1.xpath('//li[contains(@class,"gl-item")]')
	with open('JD_Phone.csv', 'a', newline='', encoding='utf-8')as f:
		write = csv.writer(f)
		for data in datas:
			p_price = data.xpath('div/div[@class="p-price"]/strong/i/text()')
			p_comment = data.xpath('div/div[5]/strong/a/text()')
			p_name = data.xpath('div/div[@class="p-name p-name-type-2"]/a/em')
			if len(p_price) == 0:
				p_price = data.xpath('div/div[@class="p-price"]/strong/@data-price')
			write.writerow([p_name[0].xpath('string(.)'), p_price[0], p_comment[0]])
	f.close()

一樣的方法繞過反爬蟲機制
image

2.簡易游戲開發

吃豆人小游戲

  • 吃豆人是電子游戲歷史上的經典街機游戲,由Namco公司的岩谷徹設計並由Midway Games在1980年發行。Pac-Man被認為是80年代最經典的街機游戲之一,游戲的主角小精靈的形象甚至被作為一種大眾文化符號,或是此產業的代表形象。它的開發商Namco也把這個形象作為其吉祥物和公司的標幟,一直沿用至今。該游戲的背景以黑色為主。畫面中,“Google”6個字母組成回廊似的迷宮畫面,四個顏色分別為紅、黃、藍、綠的鬼面符號在迷宮中穿梭,似乎在尋找一個半開半合的黃色圓圈符號。當記者按動鍵盤上的方位鍵時,發現該黃色圓圈符號可以行走,並且可以吞吃迷宮路徑上的小黃豆,但遇到鬼面符號時就要被吃掉。
  • 為方便開發,我將代碼分成兩個文件,分別是main.py和unit.py

(1)main.py
在其中主要實現了游戲窗口、參數等的初始化

constant initialize

FPS = 60
BLOCK_SIZE = 24
WIDTH = 29
HEIGHT = 15
WINDOW_WIDTH = WIDTH * BLOCK_SIZE
WINDOW_HEIGHT = HEIGHT * BLOCK_SIZE
MAP_NAME = "./material/map.maze"
BGM_NAME = "./material/bgm.ogg"
BLOCK_IMAGE = "./material/block.png"
FOOD_IMAGE = "./material/food.png"
GAMEOVER_IMAGE = "./material/gameover.png"
SERVER_PORT = 30000
ENEMY_COUNT = 4
OX = 1
OY = 1
DELAY = 8

pygame initialize

pygame.init()
display = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()
block_image = pygame.image.load(BLOCK_IMAGE)
food_image = pygame.image.load(FOOD_IMAGE)
gameover_image = pygame.image.load(GAMEOVER_IMAGE)
bgm = pygame.mixer.music.load(BGM_NAME)
scene = "game"
unit_list = []
game_map = []

map initialize

def load_map(filename):
global game_map
game_map.clear()
file = open(filename, 'r')
for line in file.readlines():
	game_map.append(list(line.strip()))
	pass
pass

set passport

def through(position):
	x = position[0]
	y = position[1]
	in_range = (x >= 0 and x < WIDTH) and (y >= 0 and y < HEIGHT)
	in_space = (not game_map[y][x] == '1')
	return (in_range and in_space)
	pass

以及對游戲是否結束的判斷模塊

def gameover():
	pygame.mixer.music.stop()
	keys = pygame.key.get_pressed()
	if keys[K_RETURN]:
		initialize()
		pass
	display.fill((0, 0, 0))
	x = (WINDOW_WIDTH-gameover_image.get_width())/2
	y = (WINDOW_HEIGHT-gameover_image.get_height())/2
	display.blit(gameover_image, (x, y))
	pygame.display.update()
	pass

(2)unit.py
在其中主要實現了敵人和玩家的創建,以及實現了游戲人物的移動

class user(unit):
	def __init__(self, x, y):
		super(user, self).__init__(USER_IMAGE)
		self.position = [x, y, x, y]
		pass

	def next(self, direction):
		self.turn(direction)
		self.ahead()
		return (self.position[2], self.position[3])
		pass

class enemy(unit):
	def __init__(self, id, x, y):
		filename = ENEMY_IMAGE[id]
		super(enemy, self).__init__(filename)
		self.position = [x, y, x, y]
		pass

def track(self, user_pos):
	rand_dir = [1,2,3,4]
	self.turn(random.choice(rand_dir))
	pass

def clockwise(self):
	self.turn(self.direction + 1)
	pass

游戲運行截圖
image

image

完整代碼見碼雲鏈接
視頻演示已上傳給小組長

三、課程總結

知識小結

這一學期跟隨着王老師學習了python,回顧所學,收獲滿滿。下面對這學期所學Python知識做一個簡單的小結。

Python是一種高級動態、完全面向對象的語言,函數、模塊、數字、字符串都是對象,並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。

Python是一種計算機程序設計語言(解釋型語言),具有代碼少、簡單、運行速度慢的特點。

  • 1、數據類型

    • 數字型:int、float、Boolean
    • 非數字型:字符串、列表、元組、字典
    • 可變類型:列表、字典
    • 不可變類型:數字、字符串、元組
    • 格式化字符串:兩種寫法
      我們上課主要學習了format字符串
      a、使用位置參數,{}的值對應填充 fromat 后面的變量 print("{}的級別是{}".format(score,grade)) 還可以使用 0、1 編號進行多個引用,0、1分別大表 format 后面變量的位置 print("{0}的級別是{1},分數是{0}".format(score,grade)) 甚至還可以使用參數列表,但是 format 后面要用 *list list=[score,grade] print("{0}的級別是{1},分數是{0}".format(*list))
      b、使用關鍵字參數:
      print("{score}的級別是{grade},分數是{score}".format(score=score,grade=grade)) 可以使用字典來傳遞關鍵字參數,但是要用 **hash hash = {'name':'hoho','age':18}
      'my name is {name},age is {age}'.format(//hash) 'my name is hoho,age is 18'
      精度與進制:變量后面加上冒號就可以指定輸出形式
      '{0:.2f}'.format(1/3) '0.33' 千分位格式化: print("{1:,}".format(8,9))
  • 2、變量
    通常數據都是讓變量來引用和保存的.
    變量是 python 中的重要概念,python 作為一門動態語言,就是體現在變量命名時不需要指定類型,而是可以指向任意類型的數據。變量命名也是有規則的,即必須是有數字、字母、下划線組成且不能數字開頭,除此之外變量名還有一個寫法上的通用原則:駝峰命名法

    • 小駝峰:首字母小寫后面單詞首字母大寫
    • 大駝峰:每個單詞的首字母都大寫
      一般函數、變量名用小駝峰,模塊和類名用大駝峰
  • 3、控制流
    python 程序運行都是從上到下依次運行,但是可以通過控制流來人為改變運行邏輯。

    • if :條件判斷
    • while、for:兩種循環

而如果要在循環體內再次人為改變邏輯,就需要用到 breake、continue了,特別注意這兩個破壞循環規則的語句都只作用在最近一層的 for、while 循環上。

  • 4.函數
    函數的出現是為了節省代碼,減少冗余。
    def func(): print(' 調用了函數')
    匿名函數:
    常用來構建列表 list=[i for i in range(6)]
    還可以搭配 map 函數來使用, map(func,[1,2,3,4,5]) 會將列表中得數組依次傳入 func 函數得到結果,得到一個map 值,再用 list 轉換一下就可以得到一個列表
    函數參數(重點理解):
    函數的參數:形式參數的定義以及實際參數的寫法

    • a、位置參數:實參+定義。就是實參會一一對應到形參上
      def func(num1) print(num1) func(10)
    • b、默認參數:定義。有默認值,如果傳入了實參就用實參,定義的時候要在非默認參數后面:
      正確:def func(num1,num2=10)
      錯誤:def func(num1=10,num2)
    • c、關鍵字參數:實參。傳入實際參數時,指定參數名字來傳遞數據,一般有一個實參用的是關鍵字參數,其余也要用,不然容易造成一個參數多個值的錯誤。 func(num1=12,num2=10) func(12,num2=10) d、元組可變參數:定義。可以接收任意數量的位置參數。使用 *args 來接收,會將接收到的值自動組包成一個元組賦給args,參數變成元組了 def func(num1,*args,name): print(num1) print(args) print(name) func(10,2,3,4,name='lan') 結果:這里是位置參數+元組可變參數 10 (2, 3, 4) lan e、字典可變參數:定義。可以接收多余的關鍵字參數,用 **kwargs 來接收。必須放到參數列表最后,不然報錯。參數變成字典了 def func(num1=0,**kwargs): print(num1) print(kwargs) func(2,a=3,b=4) 結果: 2 {'a': 3, 'b': 4}
      注意: a、如果實參用了關鍵字參數,最好就都用關鍵字參數。
      字典可變參數必須要放到最后面(比默認參數還要后),元組可變沒有順序要求。
      左右:普通參數《==元組可變《==默認參數(應該靠后)《==字典可變(必須最后) 除了字典可變,其他順序不是絕對,如果順序有變化,實參中可以用關鍵字參數來調節 b、如果形參里面既有 默認參數,又有可變參數,那么要將默認參數放到最后面,並且賦值時必須要用關鍵字參數。這也符合默認參數放到非默認參數后面的原則 def func(num1=0,*args): print(num1) print(args) # 像這里本來時像把 2,3,4 都給 args ,可以由於位置參數的原因,最終是num1=2,rags=(3,4)) func(2,3,4) 變成如下就好了:
      def func(*args,num1=0): func(2,3,4,num1=10)
  • 5、文件操作
    學習了最基本的文件讀寫操作,在實驗三中的socket通信中有所體現

  • 6、網絡爬蟲
    在最后幾節課中,我學習了request等爬蟲需要用到的庫中相關函數的使用,並動手實踐爬蟲了豆瓣網、疫情動態網,熟悉了爬蟲的一般方法。

感想與建議

  • 在這一學期課程中,我對python這門語言有了更加深入的了解。python的庫十分豐富,功能強大,品類繁多。雖然開始課程的知識點密度沒有想象中的大,但正是這段時間我不斷在實踐中鞏固了python基礎,這才讓我在課程的后半階段中能夠順利跟上老師的腳步,實現python編程能力的提升。通過這么長時間對python這一語言的學習和實踐,我深切地感受到了python的優點。

  • 至於說到建議,我覺得課程上可以講解更多的實例,讓我們在動手實現各種各樣的案例中學習python編程,也希望今后課程中能夠講到大數據分析、人工智能、神經網絡等當下熱門的內容。

  • 總而言之,在王老師的指導下,我這個學期進行了很多的編程實踐,雖然沒有完成很龐大的項目,但是在課程學習的過程中,我掌握了許許多多的知識,收獲非常大,也體會到了python寫腳本、做項目的快樂。對於我來說,能夠親手實現一些以前從來沒有編寫過的程序確實是滿滿的成就感。最后,希望自己能夠在以后的時間中,繼續學習python,親手寫出更多有意思的程序,在python學習之路上繼續前行。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM