随机数生成器在for循环Python中创建相同的数字

时间:2014-11-23 04:27:49

标签: python numbers

一个函数使用xyz,然后我在另一个函数中调用这些变量。函数距离应该从readast中取出每个xyz,然后是每行的square,sum和square root。 ex 500 600 700(每个数字的正方形,将它们全部加起来,然后将平方根加起来)它将获取该结果并在行结束后显示它。但是,我的距离数字只是我的读取功能中的最后一行数字...任何想法为什么?

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()

2 个答案:

答案 0 :(得分:1)

我看到你的功能在做什么:

readast()

实际上打开一个文件用于wrtiting并计算15个小行星的随机坐标并将每个小行星写入文件,然后返回文件对象和最后一组x,y,z坐标。你有一行关闭文件,但它永远不会运行,因为你已经从函数返回。

距离():

计算输入参数的距离并将一行写入另一个文件。它没有对你给出的astlist参数做任何事情。这将计算15条相似的线,因为x,y,z都基于一组输入参数。

我认为这根本不是你想要的。

答案 1 :(得分:0)

你的问题的简短答案是你从readast()返回一批x,y,z,然后迭代这些相同的值,而不是在距离()中改变它们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)