0

私はまだこれに慣れていませんが、私は近いと思います。私の課題は、平均、中央値、最頻値を計算することです。

  • ユーザーに数字のリストを入力するように促します (ヒント: 数字のリストの提供が完了したことをユーザーが示す方法を必ず用意してください)
  • 数字のリストを含むファイルを開く
  • 数値のリストの平均、統計中央値、最頻値を計算する
  • 回答を別のファイルに保存する
  • ユーザーに回答を表示するかどうかを尋ね、回答が「はい」の場合はファイルを開いて数字を表示します

ファイルをもっと「読みやすく」したいと思います。私が今得た結果の例は次のとおりです。

(lp1
S'3,5,6'
p2
aF4.666666666666667
aF5
aF3
a.

どんな助けでも大歓迎です!

これが私のコードです:

def mean(numbers):
    average = 0
    for number in numbers:
        average += number
    return average / float(len(numbers))

def median(numbers):
    middle = []
    for number in numbers:
        middle.append(number)
    middle.sort()
    middleValue = len(middle) / 2
    if len(middle) % 2 == 1:
        return middle[middleValue]
    else:
        return (middle[middleValue] + middle[middleValue - 1]) / 2

def mode(numbers):
    frequency = {}
    for number in numbers:
        times = frequency.get(number, None)
        if times == None:
            frequency[number] = 1
        else:
            frequency[number] = times + 1

    maxValue = max(frequency.values())
    for modeFreq in frequency:
        if frequency[modeFreq] == maxValue:
            return modeFreq        

import cPickle as pickle

def main():
    user_in = raw_input("Enter a list of numbers seperated by commas: ")
    numbers_as_strings = user_in.replace(' ', '').split(',')
    numbers = [float(x) for x in numbers_as_strings]
    if not user_in:
        return 0
    else:
        print "\nYour inputs: ", user_in, '\n'
        print "   Mean = ", mean(numbers)
        print " Median = ", median(numbers)
        print "   Mode = ", mode(numbers), '\n'
        pckl_file = file("mean_medi_mode.txt", "w")
        pickle.dump([user_in, mean(numbers),median(numbers),mode(numbers)],pckl_file)
main()

while True:
    answer = raw_input('Would you like to open a file with your results? ')
    if answer.strip() in "y Y yes Yes YES".split():
        f = open("mean_medi_mode.txt", 'r')
        for line in f:
            print line,
        print 'Done'
        break
    elif answer.strip() in "n N no No NO".split():
        print 'Done'
        break
4

2 に答える 2

1

jsonモジュールを使用してみてください。使いやすく、人間が読める

import json
code...
def main():
    user_in = raw_input("Enter a list of numbers seperated by commas: ")
    numbers_as_strings = user_in.replace(' ', '').split(',')
    numbers = [float(x) for x in numbers_as_strings]
    if not user_in:
        return 0
    else:
        print "\nYour inputs: ", user_in, '\n'
        print "   Mean = ", mean(numbers)
        print " Median = ", median(numbers)
        print "   Mode = ", mode(numbers), '\n'
        json.dump([user_in, mean(numbers), median(numbers), mode(numbers)], fp)

それで:

def print(fp):
    user_in, mean, median, mode = json.load(fp)
    print "\nYour inputs: ", user_in, '\n'
    print "   Mean = ", mean
    print " Median = ", median
    print "   Mode = ", mode, '\n'
于 2012-09-03T12:11:21.767 に答える
1

pickle ファイル (人間が読めるテキスト形式ではない) を再度開くときは、次を使用しますpickle.load

given, average, median, mode = pickle.load(f)

for line in f: print lineあなたの声明の代わりに。出力は、保存した結果を含むピクル ダンプの生の内容です。

>>> import cPickle
>>> p = '''\
... (lp1
... S'3,5,6'
... p2
... aF4.666666666666667
... aF5
... aF3
... a.
... '''
>>> cPickle.loads(p)
['3,5,6', 4.666666666666667, 5.0, 3.0]

pickle フォーマットは、あなたの目的にとっては少し扱いに​​くいかもしれません。jsonorのような、より軽量で人間が読める形式を使用するcsvと、ここでのニーズにより適している場合があります。

于 2012-09-03T12:09:01.667 に答える