2014-11-23 200 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

相关问题