1

私はPythonにかなり慣れていないので、プログラムのロジックを構築することに固執しています。学びたいのですが、外部からの助けが必要だと感じています。多分あなたたちは私を助けることができます。これは宿題/プロジェクトです。

このlist (SalesData.txt)ように見えます:

  • 名前1
  • 23
  • 34
  • 454
  • 名前2
  • 344
  • 34
  • 45

そしてそれは少なくとも5つの異なる名前のために続きます。しかし、例では、これで十分です。

基本的に、私はすべての数字の合計を考え出す必要があり、次に、すべての名前の合計を考え出す必要があります。

出力::この場合(例を使用)

  1. 総計=934(すべての数値の合計)
  2. 名前1の合計=511(名前1の数値の合計)
  3. 名前2の合計=423(名前2の数値の合計)

数字だけを含むファイルの合計を取得する方法は知っていますが、混合物になると非常に混乱します。また、すべての合計を取得する際にどのように指定できますか"name".isdigit()とを使用して.isalpha()、いつ合計するか、いつ合計しないかをリストに指示する必要がありますか?

どんなアドバイスも私を助けてくれます!ありがとう!

更新 これはこれまでの私のコードです:

data = []
data = open("SalesData.txt").read().split()
    for i in data:
        s = sum([ float(i) ])
print "Sum=" , s
print "Avg="  , s/len(data)

これは、ファイルがすべてNUMBERSの場合にのみ機能し、内容を簡単に合計できます。ただし、12個の数字ごとに文字列を処理していることを忘れないでください。フロートのある線が見つかった場合にのみ合計を計算する方法を理解しようとしています。

アップデート#2

まだガイダンスが欲しいです!私は自分のやり方で物事をまとめ始めていますが、いくつかの非常に基本的な問題を見つけました(確かに)

data = []
data = open("SalesData.txt").read().split()
    for i in data:
        if str(i):
            print 'This one is Letter'
        elif float(i):
            s = sum([ float(i) ])
print "Sum=" , s
print "Avg="  , s/len(data)

この例が機能しないことはわかっているので、その理由を知りたいと思います。リストを分析しようとしています。'i'が文字列の場合、プログラムは(この例では'Letter'を出力します)文字列でない場合は、通常の数値の合計を実行します。私はこのプログラムを一度に1つずつ取っており、提供された混合リストを使用して合計数を取得できるようにしたいのですが、文字列を文字列として分析し、浮動小数点数を浮動小数点数として分析するという側面にとらわれています。

4

4 に答える 4

3

非整数または負の値 (342.2 または -342 など) がある場合は が返されるため、使用するのに適したメカニズムではない可能性があることに注意して .isdigit()ください。False

Kreativitea が指摘したように、int()数値 (具体的には整数) から単語を識別するために使用できますがfloat()、数値が整数または浮動小数点である可能性があるより一般的なケースで機能すると考えてください。

于 2012-12-01T19:28:07.740 に答える
2

これは宿題なので、一般的なガイドラインを示します。

  1. isdigit または isalpha を使用する必要はありません。int()整数ではないものにan を使用しようとするとどうなりますか? さて、これで 2 つのグループを識別するプロセスができました。
  2. 数字のリストの後には常に同じ数の項目がありますか? そうでない場合は、whileループを使用することをお勧めします。
  3. どちらの場合も、データが持つ品質は、抽象的な用語でデータを説明するのと同じです。そのようなデータに適切に対応するデータ構造は?
  4. プロセスを分割します。読みにくい関数を 1 つ作成するよりも、読みやすい関数を 2 つ作成する方が適切です。

幸運を。:)

于 2012-12-01T19:12:25.017 に答える
0

名前が一意であると仮定すると、キーが名前で値が数値のリストになるように、ファイルからdictを入力できます。sumそうすれば、各アイテムと合計の合計を簡単に取得できますsum

dictを作成するには、単純なパーサーをまとめる必要があります。例えば:

def parse(fname):
    data = {}
    numbers = []
    for line in f:
       # figure out if line has name or number
       if ... # this is a number
           numbers.append(float(line))
       else:
           data[name] = numbers
    return data

これは宿題の質問なので、完全なコードではありません。また、おそらく最初の行で読んだ最初の名前を正しく処理する必要があることにも注意してください。

于 2012-12-01T19:08:55.693 に答える
0

更新 #2 について: ここにはいくつかの論理的な問題があります。

まず、 「ifが文字列の場合、...」if str(i):という意味ではありません。iこれは、「から文字列を作成しますi。結果の文字列が空でない場合は、...」という意味です。

2 番目は、ファイルの行のリストであるiから来ます。dataしたがって、文字列でなければなりません。これは、ファイルを読み取るときに得られるものです。プログラム.

第 3 に、このような変換が失敗すると、例外が発生して失敗します。ifブロックでそれをテストすることはできません。try/except例外処理を使用する必要があります。

s第 4 に、数値を取得するたびに、その数値だけを含む 1 つの要素リストを使用して計算しようとしています。それはあなたにすべての数の合計を与えるつもりはありません。いくつかの数を合計したい場合は、最初にどこかで数をまとめる必要があります。

5 番目にlen(data)、合計を除算する数値のカウントとして使用します。それはあなたのファイルの行数であり、それらのいくつかは除外される可能性があるとすでに述べているため、これは間違っています。数字だけを数えたいので、最初にそのリストをまとめる必要があります。

最初に数値のリストを取得できるものを書きます。その後、そのリストを使って (それぞれ 1 回ずつ、ループの外側で) 簡単に使用できsumますlen

于 2012-12-01T20:24:31.083 に答える