2017-11-04 252 views
0

我有这2个方案:打印值保存到一个文本文件蟒蛇

def calculate1(): 

    a4canon = (int(input('A4 paper (canon):')))*8.9 
    a4rainbow = (int(input('A4 paper (rainbow):')))*7.5 
    lruler = (int(input('Long ruler:')))*0.85 
    sruler = (int(input('Short ruler:')))*0.55 
    blue = (int(input('Blue pen:')))*0.65 
    red = (int(input('Red pen:')))*0.65 
    black = (int(input('Black pen:')))*0.65 
    pencil = (int(input('2B Pencil:')))*2.4 

    total = a4canon + a4rainbow + lruler + sruler + blue + red + black + pencil 

    a4canon1 = str(a4canon) 
    a4rainbow1 = str(a4rainbow) 
    lruler1 = str(lruler) 
    sruler1 = str(sruler) 
    blue1 = str(blue) 
    red1 = str(red) 
    black1 = str(black) 
    pencil1 = str(pencil) 

    total1 = str(total) 


    return('A4 paper (canon):',a4canon1) 
    return('A4 paper (rainbow):',a4rainbow1) 
    return('Long ruler :',lruler1) 
    return('Short ruler:',sruler1) 
    return('Blue pen:',blue1) 
    return('Red pen:',red1) 
    return('Black pen:',black1) 
    return('Pencil:',pencil1) 
    return('Total:',total1) 

另:

import calculate 
def display1(): 
    file = open('sample.txt','w') 
    file.write(calculate.calculate1()) 

display1() 

的问题是,它打印:

TypeError: write() argument must be str, not tuple 

上午我错过了一些东西,虽然我已经将值更改为字符串,因为我想将它保存到文本文件中,如下所示:

A4 paper(canon):1 ~ 8.9 
A4 paper(rainbow):1 ~ 7.5 
Long ruler:1 ~ 0.85 
Short ruler:1 ~ 0.55 
Blue pen:1 ~ 0.65 
red pen:1 ~ 0.65 
Black pen:1 ~ 0.65 
2B pencil:1~ 2.4 
Total:22.149999999999995 

请帮助和建议。由于

看来,当我使用:

file.write(str(calculate.calculate1())) 

它不仅节省:

('A4 paper (canon):', 8.9) 

回答

1

文件写入可以接受字符串仅这就是为什么你所得到的错误。所以,当你回来,你可以回到这样

return("A4 paper (canon):" + str(a4canon1))它会返回一个字符串,你可以用它来file.write

,或者在使用返回值,你可以将其转换为字符串

file.write(str(calculate.calculate1()))

同样在你的定义中,你有多个返回语句。第一次返回语句后没有任何内容会执行。删除所有return语句,并返回字符串的一个列表,而不是返回多个字符串

return[('A4 paper (canon):',a4canon1),('A4 paper (rainbow):',a4rainbow1),('Long ruler :',lruler1),('Short ruler:',sruler1),('Blue pen:',blue1),('Red pen:',red1),('Black pen:',black1),('Pencil:',pencil1),('Total:',total1)]

并捕获返回值变化这样

import calculate 
def display1(): 
    file = open('sample.txt','w') 
    lst=calculate.calculate1() 
    for i in lst: 
     file.write(" ".join(list(i))) 

display1() 

时,并且也并不建议采取投入在在函数定义里面。您可能需要返工

+0

都只能保存'A4纸(佳能):8.9'...另一个是缺少 –

+0

好吧,只要你给退回功能将退出,它不会打扰其他线路。请检查更新的答案 –

+0

,所以我只需要改变我的输入内功能定义...好的非常感谢 –

0

File.write接受字符串,但在你的情况下,它返回一个元组,所以不是将元组写入文件需要使用str()将其转换为字符串,然后将其写入文件。

您可能希望更多地了解file operations,也type conversions.

file.write(str(calculate.calculate1())) 
+0

它只保存为'A4纸(佳能):8.9'....其他缺失 –