解决家庭作业问题。几乎所有代码都能正常工作,但是由于某种原因,似乎无法使我的程序正确保存并退出。 这是给出的提示。
您应该创建一个程序来管理一个制表符分隔的文本文件,其中包含员工差旅费。该公司只有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()
我只需要我的程序在没有全局变量的情况下正确保存和退出