我正在尝试在python中编写我自己的食物选择器,人们可以选择是否需要在包装中添加玉米饼,并且程序将计算出成本。
我想要做的一件事是,如果客户不想立即结账,他们可以将订单保存到文本文件中。这一切都完美无缺,但如何将此文本文件重命名为user_name
,以便只显示他们的选择,因此我知道谁做出了这些选择?
if order_save =="1":
f = open ("user_name.txt","w")
f.close()
if Tortilla_option == "yes":
f = open ("user_name.txt","a")
f.write("Tortilla")
f.close()
if Chicken_option == "yes":
f = open ("user_name.txt","a")
f.write("\nChicken")
f.close()
if Salad_option == "yes":
f = open ("user_name.txt","a")
f.write("\nSalad")
f.close()
if Chilli_option == "yes":
f = open ("user_name.txt","a")
f.write("\nChilli Sauce")
f.close()
print ("Here is your takeway that will be saved",user_name,"!\n")
f = open ("user_name.txt","r")
print(f.read())
f.close()
答案 0 :(得分:1)
关于此代码的一些事情。第一:
f = open ("user_name.txt","a")
f.write("\nChilli Sauce")
f.close()
可以写成
with open(user_name+'.txt', 'a') as f:
f.write('\nChilli Saurce')
自动管理文件的关闭。它被称为context manager
此外,它将订单保存到文件中,其名称取决于用户是谁。请注意,user_name
是变量,而不是字符串。
然而,更好的策略是定义一个函数:
def write_order(user, item, option_yes_or_no):
if option_yes_or_no=='yes':
with open(user+'.txt', 'a') as f:
f.write(item)
然后用以下内容替换整个内容:
for my_option in [tortilla_option, chicken_option, salad_option]:
write_order(user_name, item, my_option)
避免重复大量代码。
答案 1 :(得分:0)
定义文件名并打开代码顶部的文件:
filename = '%s.txt' % user_name
f = open (filename, "w")
如果您不关心保存文件名以供日后使用,您甚至可以将这些文件组合成一行:
f = open ('%s.txt' % user_name, "w")
然后执行所有文件写入操作,并在完成后关闭文件。
多次打开,写入和关闭文件是浪费且容易出错的。