私の課題では、fileutility、choices、selectiveFileCopy の 3 つのモジュールが必要です。最後のモジュールは最初の 2 つをインポートします。
目的は、選択モジュールの「述語」によって決定される、入力ファイルからテキストの断片を選択的にコピーし、それを出力ファイルに書き込むことができるようにすることです。のように、特定の文字列が存在する場合 (choices.contains(x))、または長さ (choices.shorterThan(x)) によってすべてをコピーします (choices.always)。
これまでのところ、私は always() しか機能していませんが、1 つのパラメーターを受け取る必要がありますが、私の教授は、パラメーターは何でもかまいません (何もない (?) 場合もあります)。これは可能ですか?もしそうなら、それが機能するように定義を書くにはどうすればよいですか?
この非常に長い質問の 2 番目の部分は、他の 2 つの述語が機能しない理由です。それらを docstests (割り当ての別の部分) でテストしたところ、すべて合格しました。
ここにいくつかのコードがあります:
fileutility (この関数は無意味だと言われましたが、割り当ての一部なので...)-
def safeOpen(prompt:str, openMode:str, errorMessage:str ):
while True:
try:
return open(input(prompt),openMode)
except IOError:
return(errorMessage)
選択肢-
def always(x):
"""
always(x) always returns True
>>> always(2)
True
>>> always("hello")
True
>>> always(False)
True
>>> always(2.1)
True
"""
return True
def shorterThan(x:int):
"""
shorterThan(x) returns True if the specified string
is shorter than the specified integer, False is it is not
>>> shorterThan(3)("sadasda")
False
>>> shorterThan(5)("abc")
True
"""
def string (y:str):
return (len(y)<x)
return string
def contains(pattern:str):
"""
contains(pattern) returns True if the pattern specified is in the
string specified, and false if it is not.
>>> contains("really")("Do you really think so?")
True
>>> contains("5")("Five dogs lived in the park")
False
"""
def checker(line:str):
return(pattern in line)
return checker
selectedFileCopy-
import fileutility
import choices
def selectivelyCopy(inputFile,outputFile,predicate):
linesCopied = 0
for line in inputFile:
if predicate == True:
outputFile.write(line)
linesCopied+=1
inputFile.close()
return linesCopied
inputFile = fileutility.safeOpen("Input file name: ", "r", " Can't find that file")
outputFile = fileutility.safeOpen("Output file name: ", "w", " Can't create that file")
predicate = eval(input("Function to use as a predicate: "))
print("Lines copied =",selectivelyCopy(inputFile,outputFile,predicate))