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

2024-09-30 14:20:15 发布

您现在位置:Python中文网/ 问答频道 /正文

一个函数使用xyz,然后我在另一个函数中调用这些变量。函数距离应该取readast的每个xyz,然后取每行的平方、和和和平方根。ex500600700(将每个数字平方,加起来,然后求和的平方根),它将得到结果,并在行结束后显示它。但是,我在远处的数字只是readast函数中的最后一行数字。。。知道为什么吗?在

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

Tags: 函数txtfordefline数字randomopen
2条回答

我看到你的功能是:

readast()

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

距离():

计算与输入参数的距离,并将一行写入其他文件。它不处理您给它的astlist参数。这将计算15条类似的行,因为x、y、z都基于一组输入参数。在

我不认为这是你想要的。在

问题的简短回答是从readast()返回一批x、y、z,然后在distance()中迭代这些相同的值,而不改变它们15次。在

你似乎对文件和列表有点困惑(也许?)。我在这里都做过。open()调用在文件系统中打开一个文件并向其中写入文本。你这样实例化的列表:一些\-list=[]或者其他的\-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)

相关问题 更多 >