2013-02-19 4 views
1

Я довольно новичок в программировании, и у меня есть быстрый вопрос. Я пытаюсь сделать гауссову функцию для диапазона звезд. Однако я хочу, чтобы размер undercurve был равен 100 для всех звезд. Я думал о том, чтобы сделать цикл while, говорящий, что, хотя общая длина undercurve равна 100. Тем не менее, я получаю сообщение об ошибке, и я предполагаю, что это имеет какое-то отношение к тому, что это список. Я показываю вам, ребята, мой код, чтобы узнать, можете ли вы помочь мне здесь. Благодаря!Пока петли для списков?

Я получаю синтаксическую ошибку: не может назначить вызов функции

import numpy 
import random 
import math 
import matplotlib.pyplot as plt 
import matplotlib.mlab as mlab 
import scipy 
from scipy import stats 
from math import sqrt 
from numpy import zeros 
from numpy import numarray 


variance = input("Input variance of the star:") 
mean = input("Input mean of the star:") 

space=numpy.linspace(-4,1,1000) 
sigma = sqrt(variance) 

Max = max(mlab.normpdf(space,mean,sigma)) 
normalized = (mlab.normpdf(space,mean,sigma))/Max 


def random_y_pt(): 
    return random.uniform(0,1) 

def random_x_pt(): 
    return random.uniform(-4,1) 

import random 

def undercurve(size): 
    result = [] 
    for i in range(0,size): 
     y = random_y_pt() 
     x = random_x_pt() 
     if y < scipy.stats.norm(scale=variance,loc=mean).pdf(x): 
      result.append((x)) 
    return result 

size = 1 

while len(undercurve(size)) < 100: 
    undercurve(size) = undercurve(1)+undercurve(size) 
    print undercurve(size) 


plt.hist(undercurve(size),bins=20) 
plt.show() 
+5

Необходимо указать точное сообщение об ошибке, которое вы получаете. – BrenBarn

+0

Какая ошибка вы получаете? – Hoopdady

+4

Что вы пытаетесь сделать с 'undercurve (size) = undercurve (1) + undercurve (size)'? Присвоение вызова функции не имеет смысла. –

ответ

1

Если ваша ошибка что-то вроде SyntaxError: can't assign to function call то, что из-за вашей линии

undercurve(size) = undercurve(1)+undercurve(size) 

Который пытается установить выход правой части как значение undercurve(size), чего вы не можете сделать.

Похоже, вы действительно хотите увидеть только первые 100 элементов в списке, возвращаемом undercurve(size). Для этого используйте

undercurve(size)[:100] 
+0

Это его место, где приходит мой новичок с python. Мне нужно, что вы сказали, и я получил ошибку типа: range() целочисленный конечный аргумент, ожидаемый, полученный список. Это имеет смысл, поскольку undercurve (size) будет списком. Идея заключалась в выполнении цикла while. неважно, как я это делаю, пока конечный результат будет прав. –

+0

@Robert Думаю, я понимаю - см. Мое редактирование ответа. – askewchan

+0

Я знаю, что это даст мне фактические значения, но я хочу получить ровно 100 из них. Может быть, это супер очевидно, и я просто не вижу этого. Я имею в виду, что Лен (undercurve (размер)) = 100 –

Смежные вопросы