我现在有一个程序,试图将其分解为更小,更易管理的部分,以达到锻炼目的。但问题是,我在遵循指导原则时遇到了一些困难。值得注意的是,一个函数不能包含6个以上的语句。

这是程序的原始外观。

def print_monthly_totals (input_csv_filename):
'''Read the given CSV file and print the totals for each month.
   The input file is assumed to have the month number in column 1,
   the number of days in the month in column 2 and the floating
   point rainfalls (in mm) for each month in the remaining columns
   of the row.
'''
    data = open(input_csv_filename).readlines()
    print('Rainfall totals for each month')
    for line in data:
        columns = line.split(',')
        month = int(columns[0])
        num_days = int(columns[1])
        total_rainfall = 0
        for col in columns[2 : 2 + num_days]:
        total_rainfall += float(col)
        print('Month {:2}: {:.1f}'.format(month, total_rainfall))

print_monthly_totals('rainfalls2011.csv')


我设法将其分解为两个独立的功能,给我..

def print_monthly_totals(input_csv_filename):
    data = open(input_csv_filename).readlines()
    print('Rainfall totals for each month')
    for line in data:
        columns = line.split(',')
        month = int(columns[0])
        num_days = int(columns[1])
        trf = rainfall_total(columns, num_days)
        print('Month {:2}: {:.1f}'.format(month, trf))

def rainfall_total(columns, num_days):
    total_rainfall = 0
    for col in columns[2 : 2 + num_days]:
        total_rainfall += float(col)
    return total_rainfall

print_monthly_totals('rainfalls2011.csv')


但是我的print_monthly_totals函数仍然太大,我需要创建第三个函数来满足每个函数规则的6条语句。我刚尝试导致一连串的全局名称未定义错误。

def print_monthly_totals(input_csv_filename):
    data = open(input_csv_filename).readlines()
    print('Rainfall totals for each month')
    trf = rainfall_total(columns, num_days)
    print('Month {:2}: {:.1f}'.format(month, trf))

def data():
    for line in data:
        columns = line.split(',')
        month = int(columns[0])
        num_days = int(columns[1])

def rainfall_total(columns, num_days):
    '''Guts of the program'''
    total_rainfall = 0
    for col in columns[2 : 2 + num_days]:
        total_rainfall += float(col)
    return total_rainfall

print_monthly_totals('rainfalls2011.csv')


任何帮助将不胜感激,加油!

最佳答案

这个怎么样:

def print_monthly_totals(input_csv_filename):
    with open(input_csv_filename) as csv_file:
        data = csv_file.readlines()
        print('Rainfall totals for each month')
        for line in data:
            manage_line(line)


def manage_line(line):
        columns = line.split(',')
        month = int(columns[0])
        num_days = int(columns[1])
        trf = rainfall_total(columns, num_days)
        print('Month {:2}: {:.1f}'.format(month, trf))

def rainfall_total(columns, num_days):
    total_rainfall = 0
    for col in columns[2 : 2 + num_days]:
        total_rainfall += float(col)
    return total_rainfall

print_monthly_totals('rainfalls2011.csv')


这听起来很接近您想要的。
希望能帮助到你。

关于python - 将功能分解为更易于管理的部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16415759/

10-09 02:29