2016-11-22 58 views
0

我想在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

当我给服务费选项时,服务费和外卖费用加起来2.50 + 2.31是多少英镑4.8100000000000005? –

+0

因为很多(大多数?)十进制数不能完全表示为浮点数。你不应该使用花车钱。有关更多详细信息,请参阅http://stackoverflow.com/questions/588004/is-floating-point-math-broken。 –

回答

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) 

这避免了大量重复的代码。

+0

谢谢。这很好! –

+0

当我给服务费选项时,服务费和外卖费用加起来2.50 + 2.31是多少英镑4.8100000000000005? –

+0

计算机无法以无限精度表示数字,因为这需要无限的内存。在这种情况下,这意味着计算机可以存储的数字更接近实际数字4.81是您所看到的。 – elelias

0

定义文件名,打开文件在你的代码的顶部:

filename = '%s.txt' % user_name 
f = open (filename, "w") 

如果你不关心节省供以后使用的文件名,你甚至可以将这些成一条线:

f = open ('%s.txt' % user_name, "w") 

然后执行所有文件写入操作,并在完成后关闭文件。

多次打开,写入和关闭文件是浪费和容易出错的。

+0

当我给服务费选项时,服务费和外卖费用加起来2.50 + 2.31是多少英镑4.8100000000000005? –