2015-04-15 3 views
0
print "welcome to the average finder" 
print """Insert the values you want to find the average for, 
when you insert all the values type 'done'""" 

values = [] 

def insert_values(): 
    action = raw_input("> ") 

    if 'done' in action : 
     calculating_average() 
    elif action != 'done': 
     x = int(action) 
     values.append(x) 
     insert_values() 
    else: 
     print "please insert values then type done" 
     insert_values() 

def calculating_average(): 

    len = len(values) 
    sum = sum(values) 

    final = sum/len 
    print final 

insert_values() 

Цель этого скрипта: запросить у пользователя цифры, а затем позволить скрипту найти среднее число и отобразить его. Я сделал пустой список, называемый значениями, добавляю номера ввода пользователя после их превращения в целые числа.UnboundLocalError: локальная переменная 'len', на которую ссылаются до присвоения

Я продолжаю получать UnboundLocalError: локальная переменная 'len', на которую ссылается перед присваиванием ... даже думал, что я присвоил len и суммировал длину и сумму элементов в списке.

P.S. Я новичок в python, и обычно, когда я получаю сообщение об ошибке, я пытаюсь исправить это самостоятельно или исследовать его, но для этого я действительно не понимаю, почему я получаю эту ошибку ... любые идеи будут оценены!

+0

Вы можете заменить свою вторую функцию на 'def calculation_average(): print ('{}'. Format (sum (values)/len (values))), и он избавится от этой ошибки. –

ответ

3
len = len(values) 
sum = sum(values) 

Вы, наверное, не хотите использовать то же имя для переменной и функции:

>>> x = [1,2,3] 

>>> len(x) 
3 

>>> len = len(x) 
>>> len 
3 

>>> len(x) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not callable 

Чтобы устранить эту проблему, измените функцию, чтобы быть что-то вроде:

def calculating_average(): 
    xlen = len(values) 
    xsum = sum(values) 
    final = xsum/xlen 
    print final 

В заключение я вижу две другие потенциальные проблемы. Первая - это ошибка с разделителем на нуль, которую вы получите, если не вводите номера (т. Е. Сразу введите done).

Вторая - необычная ... использование рекурсии для возврата и получения следующего номера. Я бы серьезно подумал о реорганизации вашего кода, чтобы это было сделано с помощью цикла.

0

Проблема возникает при создании локальной переменной с использованием одного и того же имени глобальной функции. Python предполагает, что существует локальная переменная len, которая перезаписывает встроенную функцию len.

Чтобы исправить это, вы должны добавить строку global lenglobal sum), прежде чем создавать переменную len.

Более подробную информацию о Global против локальных переменных, вы должны посетить: http://www.python-course.eu/global_vs_local_variables.php

Однако вы не должны назвать свою переменную в качестве встроенной функции LEN.

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