0

私の課題では、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))
4

1 に答える 1

1

これまでのところ、私は always() しか機能していませんが、1 つのパラメーターを受け取る必要がありますが、私の教授は、パラメーターは何でもかまいません (何もない (?) 場合もあります)。これは可能ですか?もしそうなら、それが機能するように定義を書くにはどうすればよいですか?

デフォルトの引数を使用できます。

def always(x=None): # x=None when you don't give a argument
    return True

この非常に長い質問の 2 番目の部分は、他の 2 つの述語が機能しない理由です。それらを docstests (割り当ての別の部分) でテストしたところ、すべて合格しました。

述語は機能しますが、呼び出す必要がある関数です。

def selectivelyCopy(inputFile,outputFile,predicate):
    linesCopied = 0
    for line in inputFile:
        if predicate(line): # test each line with the predicate function
            outputFile.write(line)
            linesCopied+=1
    inputFile.close()
    return linesCopied
于 2012-04-15T23:15:49.173 に答える