2012-04-15 13 views
0

私の割り当てでは、3つのモジュール(fileutility、choices、およびselectiveFileCopy)が必要です。最後のものは、最初の2つをインポートします。入力ファイルから選択的にコピー

入力ファイルから選択したテキストを選択的にコピーし、選択モジュールの「述語」によって決定される出力ファイルに書き出すことを目的としています。のように、特定の文字列が存在する場合(choices.contains(x))、または長さ(choices.shorterThan(x))がある場合は、すべてをコピーします(choices.always)。

これまではalways()の作業しか行っていませんが、1つのパラメータを取る必要がありましたが、私の教授はパラメータが何か、何もない(?これは可能ですか?そうであれば、私の定義をどのように書くのですか?

この非常に長い質問の第2の部分は、他の2つの述語が機能しない理由です。私がドキュメンタスト(課題の別の部分)でそれらをテストしたとき、彼らはすべて合格しました。ここで

は、いくつかのコードです:

fileutility(Iは、この機能は無意味であると言われてきたが、その割り当てのその部分...) -

def safeOpen(prompt:str, openMode:str, errorMessage:str): 
    while True: 
     try: 
     return open(input(prompt),openMode)    
     except IOError: 
      return(errorMessage) 

choices-

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 

選択ファイルコピー-

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)) 

答えて

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 
+0

ああ。はい、ありがとうございます。私は単純なことを知らない傾向があります。 –

関連する問題