2015-12-13 3 views
-1

Итак, я просто изучаю Python и работаю над онлайн-упражнениями, чтобы использовать язык и программное обеспечение. Сейчас я работаю над тем, чтобы запустить одну функцию (getData()), а затем результаты этой функции, чтобы запустить другую функцию (getStats()), и все это с main(). Каждый из них работает индивидуально, но у меня проблема с main(). Я могу получить свой первый getData() для запуска и создания своего списка, но я не могу получить этот список, чтобы запускать его непосредственно в getStats(). Он фактически снова запускает getData(), а затем возвращается с сообщением об ошибке, когда я помещаю вход. У кого-нибудь есть предложения для меня, чтобы не получить это сообщение об ошибке, а затем фактически запустить мой getStats()?Как запустить одну функцию, а затем другую функцию в main()

def getData(): 
    import math 
    pop = [] 
    while True: 
     user = raw_input("Please enter a population number (-1 to quit): ") 
     pop.append(user) 
     if user == '-1': 
      break 
     if user <= '0': 
      print "Population not valid, please input a value higher then 0" 
    new_pop = map(int, pop) 
    pop2 = filter(lambda x:x >=1, new_pop) 
    print "Your population list is: ", pop2 
    return 
def getStats(): 
    i = "" 
    asc = sorted(i) 
    print "The collected data in the asecending order", asc 
    dec = sorted(i, reverse = True) 
    print "The collected data in the descending order", dec 
    maxi = max(i) 
    print "The maximum of the collected data is", maxi 
    mini = min(i) 
    print "The minimum of the collected data is",mini 
    def getMean(i): 
     aver = round(sum(i), 2)/round(len(i), 2) 
     print "The average of the collected data is %.2f" % aver 
    getMean(i) 
    def getStdev(i): 
     aver = sum(i)/len(i) 
     var = sum(pow(user-aver,2) for user in i)/len(i) 
     stdev = math.sqrt(var) 
     print "The standard deviation of the collected data is %.2f" % stdev 
    return 
def main(): 
    getData() 
    getStats(getData()) 
main() 
+0

Пожалуйста, добавьте ** полный текст ** любых ошибок или трассировок на вопрос, щелкнув ссылку [edit]. Пожалуйста, добавьте образец ввода, ожидаемый результат и ваш фактический результат. Вопросы, требующие отладочной помощи (** «почему этот код не работает?» **) должны включать в себя желаемое поведение, * конкретную проблему или ошибку * и * самый короткий код, необходимый для воспроизведения ** в самом вопросе * *. Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – MattDMo

ответ

0

Переменные внутри каждой функции не могут быть доступны с помощью других функций переменной/функции scope. Один из способов их использования состоит в том, чтобы функция возвращала эти значения. Вот упрощенный пример:

def get_data(): 
    data = raw_input('Ask for data') 
    return data 

def get_stats(data): 
    sorted_data = sorted(data) 
    print 'Sorted:', sorted_data 

data = get_data() # get_data will point 'data' to the value returned 
get_stats(data) # call get_stats, and pass 'data' as an argument 

Некоторые другие мысли:

  • Вы действительно не нужна функция Main(). Это ничего не значит. Что является более распространенным, является добавление условного оператора только работать, если вы работаете сам файл, но не тогда, когда она импортируется как модуль:

    if __name__ == '__main__': data = get_data() get_stats(data)

  • Заканчивать PEP 008

    Обычно ваш импорт должен быть в начале файла (Imports)

    имена функций camel_case

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