2010-12-01 29 views
0

ユーザーが指定したファイル内の最初の番号を出力するプログラムを作成します。ファイル名を入力してくださいpython読み取り出力


l11-1.txt最初の数は20

であるあなたは、ファイルオブジェクトのメソッドの.readを使用する必要があります(1)で1つの文字を読むためにそれは次のように振る舞うべき時間であるかどうかをチェックする文字列オブジェクトメソッドです。番号がない場合、予想される動作は次のようになります。

ファイル名を入力してください:l11-2.txt
l11-2.txtに番号はありません。

一度に1文字を読み出すのが、.read()を1回呼び出してからループを使用して結果の文字列を処理するよりも優れたアルゴリズムです。

私はファイルを持っており、上記の答えに対応していますが、正しく出力する方法はわかりません。

私がこれまで持っているコードは以下の通りです:

filenm = raw_input("Enter a file name: ") 
    datain=file(filenm,"r") 

try: 
    c=datain.read(1) 
    result = [] 
    while int(c) >= 0: 
    result.append(c) 
    c = datain.read(1) 

except: 
    pass 
if len(result) > 0: 
    print "The first number is",(" ".join(result))+" . " 
else: 
    print "There is no number in" , filenm + "." 

これまでのところ、これはファイルをオープンし、それを読み込みますが、出力は1つがある場合でも、常に何の数ではありません。誰でも助けてくれますか?

答えて

0

あなたの最後の行がファイル内の行をループしていきます。これは、先生が望んでいないように聞こえるため、あなたは1文字を読みたいと思っています。

c = datain.read(1) 

は、文字列の中に単一の文字を読み込みます:ファイルオブジェクトは、あなたがそう、読むためにどのように多くのバイト数を指定できます.read()方法があります。あなたはそれが数字かないかどうかを判断するためにその上.isdigit()を呼び出すことができます。

c.isdigit() 

あなたは、あなたが出て実行するまでの数字を読み続け、その後、一緒にすべてを連結することになっているようですね。あなたが読む最初のものが数字でない場合(c.isdigit()False)、ちょうどエラーが発生します。

+0

ファイル全体を調べ、番号の最初のインスタンスを見つけて返します。 –

+0

@justinああ、誤解されている。あなたは '.isdigit()'が 'True'であるものを返すまで、' datain.read(1) 'を呼んでいるだけです。 –

+0

うんうん、うまくいきませんでした... :( –

0

datain変数はファイルオブジェクトです。一度に1文字ずつ読むには、.read(1)メソッドを使用します。 string methodsを見て、文字列が数字であるかどうかを調べる文字列を探してください。

1

OK、あなたはいくつかの命令を与えてきました:

  • は、あなたが得るまで
  • が一度にその文字列で指定したファイル
  • .read(1)文字を開いて、ユーザからの文字列の入力を読み込みます最初の数またはEOF
  • 印刷あなたがここに第一及び第二の部分を持っている数

(althougあなたはfileの代わりにopenを使用してファイルを開く必要があります)、次に何をしますか?最初に行うべきことは、アルゴリズムを理解することです。コンピュータには何をしたいのですか?

+0

hmmm数字が表示されているかどうかを確認するために読み込みを開始したい場合は「No number in」と入力してください。filenm –

+0

@justin: ''こんにちは、111. "' - あなたは '111'を返してはいけませんか? – katrielalex

+0

はい、数字の最初のインスタンスです。 –

0

なぜ、一度に1文字を呼び出す方が、より良いアルゴリズムですか。read()を1回実行し、結果の文字列をループで処理しますか?

「より良い」と定義します。

この場合、それはあなたが考えるようになるので「より良い」です。

場合によっては、最初の数バイトを読み込むだけで十分です。

場合によっては、行全体が入力バッファーに座っていない可能性があるため、「より良い」ことがあります。

あなたは(整数または浮動小数点の検索)のような正規表現を使用することができ
0

import re 
with open(filename, 'r') as fd: 
    match = re.match('([-]?\d+(\.\d+|))', fd.read()) 
    if match: 
    print 'My first number is', match.groups()[0] 

このようなものを持つと:「こんにちは111」 =>は111を出力します。

関連する問題