2017-03-23 17 views
0

ここでは、私がやろうとしている教訓があります: "ファイルに保存されているすべての数値を読み込み、合計次に、プログラムが平均スコアを計算して、それを画面に表示するパーセント値として表示させます。次に、プログラムがIOError例外とValueError例外を処理することを確認します。動作するように何かを得る私はそれを動作させることができる唯一の方法は、このようにそれを実行している:。ファイルからデータを読み込み、Pythonを使ってデータのパーセンテージを追加して検索する

def main(): 
infile = open('numdata.txt', 'r') 
num1 = int(infile.readline()) 
num2 = int(infile.readline()) 
num3 = int(infile.readline()) 
num4 = int(infile.readline()) 
num5 = int(infile.readline()) 
num6 = int(infile.readline()) 
num7 = int(infile.readline()) 
num8 = int(infile.readline()) 
infile.close() 
total = num1+num2+num3+num4+num5+num6+num7+num8 
average = total/8 
print('the total: ', total) 
print('the average: ', average) 

main() 

ここで私が思い付くことが最高です:

def main(): 
    total = 0 

    try: 
     NumberFile = open('numdata.txt', 'r') 

     for line in NumberFile: 
      amount = float(line) 
      total += amount 
      print(format(total, ',.2f')) 

     print('Total: ', format (total, ',.2f')) 

    except ValueError: 
     print('Non-numeric data found in the file.') 

    except IOError: 
     print('An error occured trying to read the file.') 

    except: 
     print('An error has occured.') 

    finally: 
     NumberFile.close()      

main() 

これは私が出力のために得るものです: 78.00、 171.00、256.00 、 356.00、513.00 437.00、ファイルで見つかった 607.00、684.00 、 非数値データ。

誰かが私にループを使用して追加を行う方法の例を見せたいと思っていたら、私は非常に感謝しています。ファイルの数は、次のとおり しかし、1-8トリックを行います使用します。すべての助けをいただければ幸いです。私はこれには非常に新しいので、私はそれをやっているより簡単な方法があると確信しています。私は、私が使っている本を例にしてみようとしましたが、私はそれらを単語のためにコピーしています。私もビデオの例を試してみましたが、私はすべてを正確にコピーしましたが、私はまだループを働かせることができませんでした。スーパーイライラ。 ここでは、私が使用しようとしたが動作しなかった例を示します。簡単にするために数字は1,2,3になります。これらは、06_tipsと呼ばれる.txtファイルにあります。

tipfile = open('06_tipfile.txt', 'r') 
strRead = tipfile.readline() 
ftTotalTips = float(strRead) 
while strRead != '': 
strRead = tipfile.readline() 
if strRead != '': 
    ftTotalTips = float(ftTotalTips) + float(strRead) 
print('Total tips are: ', format(ftTotalTips,'.2f')) 

このように正しく動作するはずですか?それは私のためではありません。

、誰もが素晴らしいだろう私の問題への答えを私に提供したい場合、

答えて

0

ここでは、始めるための基本的な例を示します。代わりに、ハードコーディングファイルから読み込まれますどのように多くの数字で、あなたはリストを返しますfile.readlines()と、ファイル内のすべての行を読むことができる、とリストはlength方法があります:exception handlingはに

import sys 

def main(): 
    nums = [] 
    with open('numdata.txt', 'r') as data: 
     for d in data.readlines(): 
      try: 
       nums.append(int(d.strip('\n'))) 
      except IOError: 
       print("got IOError") 
       sys.exit() 
      except ValueError: 
       print("got ValueError") 
       sys.exit() 

    total = sum(nums) 
    average = total/len(nums) 
    print('the total: ', total) 
    print('the average: ', average) 

main() 

必要があるかもしれませんがファイル内の数字がfloatのようなさまざまなデータ型になりますが、あなたの例の数字はint()のようになります。

+0

あなたがそれが働いており、それが助けられたと聞いてうれしいです。ところで、答えのすべてまたはいずれかが助けられたならば、あなたはすぐにそれを受け入れる必要はなく、あなたは "感謝"を与える方法としてupvoteすることもできます:) – davedwards

+0

アウト:) – hppylttletrees

0

:)おかげで、このスニペットを試してみてくださいので、私が試したが、ゼロが働いていた例の類似したの束が、ありました:

def is_float(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

def get_nums(infile): 
    with open(infile, 'r') as f: 
     return [float (x) for x in f.read().splitlines() if is_float(x)] 

def main(): 

    nums = get_nums('numdata.txt') 
    if nums: 
     total = sum(nums) 
     avg = total/len(nums) 

     print('The total: ', total) 
     print('The average: ', avg) 
    else: 
     print('No numbers found in the textfile') 

if __name__ == '__main__': 
    main() 

希望します。

+0

が助けてくれてありがとう任意の空の文字列(私はかなりの数になっていた)を取り出して、それが動作するようになりました:)うれしい – hppylttletrees

+0

@hppylttletreesを助けて! – Szabolcs

0

私はあなたのファイルがどのように見えるか知りませんが、あなたの番号が新しい行(\ n)で区切られている場合、あなたはこの

with open("numdata.txt") as t: 
    print sum(map(int, filter(None, t.read().split("\n")))) 

合計使用することができます - リストアップ合計

マップ -

フィルタをintに文字列から数値を変更する -

+0

ええ空の文字列が犯人だった、助けてくれてありがとう – hppylttletrees

+0

@hppylttletrees喜んで:) – Glacier11

関連する問題