2014-11-23 197 views
0

一個函數使用xyz,然後在另一個函數中調用這些變量。函數距離應該從readast中獲取每個xyz,然後每個行使用square,sum和square root。例如500 600 700(每個數字平方,將它們全部加起來,然後平方和)它將取得該結果並在行結束後顯示它。然而,我的距離數字只是我的readas函數中的最後一行數字......任何想法爲什麼?在for循環中創建相同數字的隨機數生成器Python

def readast(): 

    astlist=open('asteroids.txt','w') 
    letter=65 
    for line in range(15): 
     x=random.randint(1,1000) 
     y=random.randint(1,1000) 
     z=random.randint(1,1000) 
     astlist.write(('\n')+chr(letter)+('\t')+(str(x))+('\t')+(str(y))+('\t')+(str(z))) 
     letter=letter+1 

    return astlist,x,y,z 
    astlist.close() 

def distance(astlist,x,y,z): 

    distlist=open('distance.txt','w') 
    letter=65 
    for line in range(15): 
     x1=x**2 
     y1=y**2 
     z1=z**2 
     equation=math.sqrt(x1+y1+z1) 
     distlist.write(('\n')+chr(letter)+('\t')+(str(x))+('\t')+(str(y))+('\t')+(str(z)+('\t')+(str(equation)))) 
     letter=letter+1 

    return distlist 
    distlist.close() 
+0

一個函數被稱爲「讀」,但這兩個函數都不讀任何東西。函數中的'return'之後的代碼將不會運行。你明確地在'readast()'的'return'行中返回一組'x,y,z'值。 – 2014-11-23 04:49:16

回答

1

我看到你的函數做:

readast()

實際上是打開文件wrtiting並計算15個小行星隨機座標,並寫入每一個到該文件,則返回文件對象和最後一組x,y,z座標。你有一行關閉文件,但它永遠不會運行,因爲你已經從函數返回。

距離():

計算從輸入參數的距離和寫入線到不同的文件。它不會對astlist參數給予任何幫助。這將計算15條相似的線,因爲x,y,z都基於一組輸入參數。

我不認爲這是你想要的。

0

你的問題的簡短答案是你從readast()返回一大堆x,y,z,然後迭代這些相同的值而不改變它們在distance()中的15次。

你似乎對文件和列表有些困惑(也許?)。我已經在這裏完成了。 open()調用在文件系統中打開一個文件並向其寫入文本。您實例化的列表:some_list = []或other_list = [1,2,3]或其他方式...在寫入文件時,文件中的當前位置移動到結尾。您可以使用seek()將當前位置移回文件中,但除非您擁有數百萬個這樣的內容,否則列表會更好。如果你不需要文件,那麼你可以註釋掉引用它們的行,因爲我們在這裏使用列表的函數之間進行通信。希望這會讓你指向正確的方向。祝你好運。

import random 
import math 


def write_ast(): 
    asteroids = open('asteroids.txt','w') 
    ast_list = [] 
    letter = 'A' 
    for line in range(15): 
     x = random.randint(1,1000) 
     y = random.randint(1,1000) 
     z = random.randint(1,1000) 

     asteroids.write('%s\t%s\t%s\t%s\n' % (letter, x, y, z)) 
     ast_list.append((letter, x, y, z)) 

     letter = chr(ord(letter) + 1)   
    return ast_list 


def write_distance(ast_list): 
    distance = open('distance.txt','w') 
    dist_list = [] 

    for letter, x, y, z in ast_list: 
     x1=x**2 
     y1=y**2 
     z1=z**2 
     distance_from_origin = math.sqrt(x1+y1+z1) 
     distance.write("%s\t%s\t%s\t%s\t%s\n" % (letter, x, y, z, distance_from_origin)) 
     dist_list.append((letter, x, y, z, distance_from_origin)) 

    return dist_list 


ast_list = write_ast() 
write_distance(ast_list) 
+0

這工作完美。這是我的第一個編程課,教授不是最好的,所以我主要是自己學習,這是你可能會看到混合列表和文件以及所有這些的地方。非常感謝! – Jackie 2014-11-23 21:04:13

相關問題