筆記45 笨辦法學python練習48使用者輸入高階
遊戲之中有固定字串控制和非固定字串控制的兩種控制方式,但那個固定控制的方式還沒有弄得很清楚,就要接觸這個非固定的方式,有點難度。不過,也許弄明白了這個非固定控制方式,連帶地就把固定方式一併明白了的。於是,開始了這個練習48,期待能夠在這個練習**現一點新氣象。
先準備指令的詞彙,然後找到給語句斷句的方法。因為乙個語句是由單詞組成,而單詞的標誌就是每個詞之間的空格。所以,句子就可以定義為:由空格隔開的單詞構成的符號串。有了這些基礎,我們就可以用「元組」tuple的組合方式,建立乙個(type,word)來對句子構件單詞逐一檢查了。
這個檢查的工具就是掃瞄器,而掃瞄器就是我們要做的乙個軟體**。 這樣,我們首先要做的是建立乙個專案骨架,承接ex47,自然就是ex48,是projects後面和ex47並列的乙個骨架。
然後,就是做乙個掃瞄器,檔名應該是lexicon.py,借鑑幾個部落格文字的幫助,稍作改動也做乙個掃瞄器,檔案自然置於ex48之下。
這個檔案,我從最簡單的做起,每個型別取4個詞。先做乙個lexicon再說。剛才在部落格中又找到乙個複雜些的**,這個先試試。
這個lexicon.py做出來了,在python中可以執行,但如何在骨架ex47之下得到測試,這個感覺一直都沒有得到。
掃瞄器lexicon.py**
在這裡插入**片directions = ('up', 'down', 'left', 'right')
nouns = ('zhao', 'qian', 'sun', 'li')
verbs = ('go', 'come', 'walk', 'run')
preps = ('to', 'in', 'for', 'with')
def scan(stuff):
words = stuff.split()
sentence =
for word in words:
try:
if word in directions:
elif word in nouns:
elif word in verbs:
elif word in preps:
else:
word = int(word)
except valueerrow:
return none
def test():
said = input("> ")
if said == "lets go":
print("ok")
if __name__ == "__main__":
test()
然後錄入那個lexicon_tests.py,按照我的掃瞄器錄入的。但還沒有解決它在py中無法執行的問題。
以下為lexicon_tests.py錄入**
在這裡插入**片 from nose.tools import *
from ex48 import lexicon
def test_directions():
assert_equal(lexicon.scan("up"), [('direction', 'up')])
result = lexicon.scan("up down left")
assert_equal(result, [('direction', 'up'),
('direction', 'down'),
('direction', 'left')])
def test_verbs():
assert_equal(lexicon.scan("go"), [('verb', 'go')])
result = lexicon.scan("go run walk")
assert_equal(result, [('verb', 'go'),
('verb', 'run'),
('verb', 'walk')])
def test_nouns():
assert_equal(lexicon.scan("zhao"), [('noun', 'zhao')])
result = lexicon.scan("zhao qian sun")
assert_equal(result, [('noun', 'zhao'),
('noun', 'qian'),
('noun', 'sun')])
def test_preps():
assert_equal(lexicon.scan("with"), [('prep', 'with')])
result = lexicon.scan("with in on")
assert_equal(result, [('prep', 'with'),
('prep', 'in'),
('prep', 'on')])
def test_numbers():
assert_equal(lexicon.scan("1234"), [('number', '1234')])
result = lexicon.scan("3 91234")
assert_equal(result, [('number', 3),
('number', 91234)])
def test_errors():
assert_equal(lexicon.scan("asdfg"),
[('error', 'asdfg')])
result = lexicon.scan("zhao ias qian")
assert_equal(result, [('noun', 'zhao'),
('error', 'ias'),
('noun', 'qian')])
接下來的任務依然覺得無從下手,做了很多嘗試,可惜沒有找到門道,只有先閣下再說。繼續前行,接觸練習49吧。 笨辦法學Python 習題45 End
習題45 多重繼承 習題46 touch是linux系統下的命令 關於new item這個命令需要在powershell下執行 並且要在skeleton下使用 在windows上,你可以這樣配置初始檔案 new item type file name init py new item type fi...
《笨辦法學Python》 第45課手記
本節課將物件和類以及他們之間的從屬關係。從整個電腦科學的角度來說,物件是對客觀事物的抽象,類是對物件的抽象。類和物件都是一種抽象的資料型別。物件 是指在應用問題 現的各種實體 事件和規格說明等,它是由一組屬性和在這組值上的一組服務 這裡的服務指的是操作,就是我們寫在類裡的函式所提供的功能,本文作者注...
笨辦法學Python
1.知識點 13節講的主要是module 模組 的概念,常用的語法是from xx import 依託於python強大的模組庫,使得呼叫十分輕鬆,功能十分強悍。argv叫做引數變數,可以理解為乙個包裹,在解包 unpack 的時候,將引數值賦給不同的變數名,其中第乙個變數是 隱藏 的,用來指代檔案...