获取python作业字典程序以正确保存和退出

时间:2019-03-28 13:43:44

标签: python python-3.x

解决家庭作业问题。几乎所有代码都能正常工作,但是由于某种原因,似乎无法使我的程序正确保存并退出。 这是给出的提示。

  

您应该创建一个程序来管理一个制表符分隔的文本文件,其中包含员工差旅费。该公司只有4名员工,包括爱丽丝,鲍勃,卡尔和黛安。数据文件中的每个记录将包含员工姓名,目的地城市,行驶的英里数和使用的加仑。

     

要获得完整的信用额:

     
      
  • 您的程序应正确地在制表符分隔的数据文件中读取和存储给定数据。也就是说,我应该能够将您的程序与数据文件一起使用而不会出错。
  •   
  • 将数据读入程序后,应将其组织为词典列表,其中每个词典都是文件中的一行,并使用以下词典键:名称,城市,英里,加仑。
  •   
  • 您需要添加功能以显示用户名,行驶的总英里数,使用的总加仑油量,平均mpg以及总英里数的费用(每英里75美分)。这应该适用于您输入的4个正确的用户名中的任何一个。
  •   
  • 除非您愿意,否则您不需要进行任何数据验证。
  •   
  • 当且仅当您的程序运行完全正常时,如果您(而不是使用串联)正确地使用python CSV模块在文件中读取和写入数据,并将制表符分隔的数据到字典中,反之亦然。
  •   
  • 您需要或多或少使用讲义提供的基本代码。所有4个菜单选项都应该起作用。
  •   
  • 使用格式将所有内容排列在显示选项1的整洁列中。
  •   

我的问题是我无法使第四个选项“保存并退出”正常运行。

def read_file(travels):
    salesperson_list = []
    with open("travels.txt", 'r') as infile:
        for line in infile.readlines():
            line = line.strip().split('\t')
            d = {}
            d['name'] = line[0]
            d['city'] = line[1]
            d['miles'] = eval(line[2])
            d['gallons'] = eval(line[3])
            salesperson_list.append(d)
    return salesperson_list


def display_all_data(data):
    print('{0:<8}{1:<15}{2:<8}{3:<8}'.format('Name', 'City', 'Miles', 'Gallons'))
    for row in data:
        print('{0:<8}{1:<15}{2:^8}{3:^8}'.format(row.get('name'), row.get('city'), \
                                                 row.get('miles'), row.get('gallons')))


def calculate_user_data(data):
    name = input('Enter user name: ').lower()
    total_miles = sum([row.get('miles') for row in data if row.get('name') == name])
    total_gallons = sum([row.get('gallons') for row in data if row.get('name') == name])
    cities = [row.get('city') for row in data if row.get('name') == name]
    mpg = total_miles/total_gallons
    owed = mpg*0.75
    print('Total miles travelled: {0}'.format(total_miles))
    print('Total gallons used: {0}'.format(total_gallons))
    print('mpg = ',mpg)
    print('expense = $', owed, 'at 75 cents per mile')


def add_a_trip(data):
    name = input('Input name: ').lower()
    city = input('Input city travelled: ').lower()
    miles = eval(input('Enter miles travelled: '))
    gallons = eval(input('Enter gallons used: '))
    d = {}
    d['name'] = name
    d['city'] = city
    d['miles'] = miles
    d['gallons'] = gallons
    data.append(d)
    print('Data added successfully')


def save_And_exit(data):
    with open('F:\\travels.txt','w') as outfile:
        for row in data:
            outfile.write(row.get('name')+'\t'+row.get('city')+'\t'+\
                      str(row.get('miles'))+'\t'+str(row.get('gallons'))+'\n')
    print('Saved to file')

def menu(salesperson_list):

    print('Menu options. Choose 1, 2, 3, or 4')
    print('[1] Display all trip data')
    print('[2] Calculate user data')
    print('[3] Add a trip')
    print('[4] Save an exit')
    while True:
        choice = input('Enter choice --> ')
        if choice == '1':
            display_all_data(salesperson_list)
        elif choice == '2':
            calculate_user_data(salesperson_list)
        elif choice == '3':
            add_a_trip(salesperson_list)
        elif choice == '4':
            save_And_exit(salesperson_list)
            print('Bye')
            break
        else:
            print('Invalid selection')


def main():
    salesperson_list = read_file('F:\\travels.txt')
    menu(salesperson_list)
main()

我只需要我的程序在没有全局变量的情况下正确保存和退出

0 个答案:

没有答案