2014-11-23 2 views
0

하나의 함수는 xyz를 사용하고 다른 함수에서는 이러한 변수를 호출합니다. 함수 거리는 각 xyz를 readast에서 취한 다음 각 행을 제곱, 합 및 제곱근으로 가정합니다. ex 500 600 700 (각 숫자를 제곱하고 모두 합친 다음 합계 제곱근) 행이 끝난 후에 그 결과를 표시합니다. 그러나, 거리에있는 나의 수는 나의 ​​readast 함수에있는 단지 숫자의 마지막 줄입니다 ... 어떤 생각? 다음은 반환for 루프에서 동일한 숫자를 생성하는 난수 생성기 Python

실제로 wrtiting의 파일을 열고 15 개 소행성에 대한 임의의 좌표를 계산하고 파일 하나 하나를 기록

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

하나의 기능을 "읽기"라고 부르지 만 어느 기능도 아무 것도 읽지 않습니다. 함수에서'return' 이후의 코드는 실행되지 않습니다. 당신은'readast()'의'return' 라인에있는 한 세트의'x, y, z' 값을 명시 적으로 리턴합니다. –

답변

1

파일 객체와 x, y, z 좌표의 마지막 세트입니다. 파일을 닫는 줄이 있지만 함수에서 이미 반환했기 때문에 실행되지 않습니다.

거리()

입력 파라미터로부터의 거리를 계산하고, 다른 파일에 광고를 쓴다. 그것은 그것이 주어진 astlist 매개 변수와 함께 아무것도하지 않습니다. x, y, z는 모두 한 세트의 입력 매개 변수를 기반으로하기 때문에 15 개의 유사한 행을 계산합니다.

나는 이것이 당신이 원하는 것 같지 않습니다.

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