2017-11-04 250 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'....其他缺失 –