-5

出力リストを以下の出力としてファイルに出力しようとしていますが、エラーが発生し続けます。

サンプル入力

0
2
5
12
32
64
241

サンプル入力の position.dat の内容

[1, 0]
[0, 2]
[-4, -4]
[-64, 0]
[65536, 0]
[4294967296, 0]
[1329227995784915872903807060280344576, 1329227995784915872903807060280344576]

これが私のコードです:

infile = open("position.dat", "w")
def B(n):
    direction=[[1,0],[0,1],[-1,0],[0,-1]] #right, up, left, down
    start=[0,0]
    x=start[0]
    y=start[1]    
    if n>50000:
        return "Do not enter input that is larger than 50000"
    elif n==0:   #base case
        return [1, 0]
    elif n==1:
        return [1, 1]

    elif n%2==0 and n%4!=0:  #digit start from n=2 and every 4th n digit
        x=0            # start from second digit (n) x=0 for every 4th digit
        y=((-4)**(n//4))*2 


    elif n%4==0:      #print out every 4 digits n
        y=0  #every 4digit of y will be 0 start from n=0
        x=(-4)**(n//4)  #the pattern for every 4th digits

    elif n>3 and n%2 !=0 and n%4==1: #start from n=1 and for every 4th digit
        x=(-4)**(n//4)
        y=(-4)**(n//4)

    elif n%4==3 and n%2 != 0:  #start from n=3
        y=((-4)**(n//4))*2
        x=((-4)**(n//4))*-2
    return [int(x),int(y)]     #return result


print(B(0))    # print the input  onto python shell
print(B(2))
print(B(5))
print(B(12)) 
print(B(32))
print(B(64))
print(B(241))
print(B(1251))
#Please also input the integers below for printing it on the the file

infile.write(B(0)+'\n')   # these keep giving me error
infile.write(B(2)+'\n')   



infile.close()

リストをブラケット付きのファイルに印刷することはできますか?

4

3 に答える 3

2

__str__方法でlistこれを行うことができます。すなわち使用

infile.write(str(B(0)) + '\n')
infile.write(str(B(2)) + '\n')   
于 2013-10-25T06:00:16.507 に答える
1

あなたはそのようなものを使うことができます:

with open ("temp.txt","wt") as fh:
   fh.write("%s\n" % str([0,1]))
  • 書式プリミティブを使用する
  • 要素を明示的に文字列に変換します

または、個人用書式を使用します。

fh.write("[%s]\n" %(','.join(map (str,B(0))))
于 2013-10-25T05:59:56.790 に答える
0

を使用して直接リストを作成することはできませんwrite。ただし、生の文字列を生成することはできます。

s0 = "[" + ", ".join([str(x) for x in B(0)]) + "]"
infile.write(s0 + "\n")
于 2013-10-25T05:59:43.660 に答える