筆記45 笨辦法學python練習48使用者輸入高階

2021-10-08 07:29:09 字數 2912 閱讀 4456

筆記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 的時候,將引數值賦給不同的變數名,其中第乙個變數是 隱藏 的,用來指代檔案...