2010-01-01 2 views
0

Я пытаюсь выполнить интеграцию в Python, но всякий раз, когда я ввожу значение, мои выходы всегда приводят к 0. В чем причина?Чтение значений с помощью raw_input в Python

Например:

def main(): 
    eq_of_form() 

    value_of_a() 
    value_of_b() 
    value_of_c() 
    value_of_m() 
    value_of_n() 

    value_of_x() 
    area_under_graph() 

def eq_of_form(): 
    print "Eq of the form y = ax^m + bx^n + c " + ":" 

def value_of_a(): 
    return raw_input("Enter value for a \n") 

def value_of_b(): 
    return raw_input("Enter value for b \n") 

def value_of_c(): 
    return raw_input("Enter value for c \n") 

def value_of_m(): 
    return raw_input("Enter value for m \n") 

def value_of_n(): 
    return raw_input("Enter value for n \n") 

def value_of_x(): 
    return raw_input("Enter a value for x to find " + 
       "value of y and the gradient at that point \n " + "x = ") 

def area_under_graph(): 
    y = (int(value_of_a())*int(value_of_x())**(int(value_of_m())+1))/((int(value_of_m())+1)) 
    // * 2nd part.This works for me(: 
    // + (int(value_of_b())) * (int(value_of_x())** 
    // (int(value_of_n())+1))/(int(value_of_n())+1) + ((int(value_of_c())*int(value_of_x()))) 

    print y 

main() 

(* Примечание: eq под функцией area_under_graph() только половина из них, потому что другая половина рода работы, так что я не отправлял его :)) Для верхнего кода, Я попытался ввода значения здесь: (может быть, вы можете попробовать использовать тот же (:)

a = 1 
b = 2 
c = 1 
m = 2 
n = 1 
x = 1 

Я должен получить 7/3, который является 2,333, но я в конечном итоге получить 2. проблема, как представляется, лежат в первая часть уравнения

Извините за вопрос о новичке.

+0

Пожалуйста, прочитайте ответы на свой предыдущий вопрос по адресу http://stackoverflow.com/questions/1988533.Он очень похож на этот. Вы должны попытаться научиться программированию, прочитав об этом, а не пробной ошибкой. –

+1

Хотя ответ THC4k верен для вашей непосредственной проблемы, вам кажется (из этого и предыдущего вопроса) иметь любопытное непонимание того, как управление течет между функциями в структурированной программе. Все это с вызовом каждого шага, в свою очередь, как отдельная функция, прежде чем называть их снова, очень странно, а не то, как кто-то обычно пишет программу. – bobince

ответ

5

Ваш код в начале неправильный. Вам необходимо назначить переменные после прочтения пользовательского ввода:

value_of_a() 

должно быть:

a = value_of_a() 

Также нет необходимости писать отдельную функцию для ввода каждой переменной. Вы могли бы вместо того, чтобы иметь функцию, которая принимает параметр:

def get_user_value(name): 
    return raw_input("Enter value for %s\n" % name) 

a = get_user_value("a") 
b = get_user_value("b") 
# etc.. 

Но тогда вы игнорируете все эти значения и читать их снова внутри метода area_under_curve(). Это, вероятно, не то, что вы намереваетесь сделать. Кроме того, внутри этого метода предполагается, что все параметры являются целыми числами. Если вы используете Python 2.5 деление здесь целочисленное деление:

m1/m2 

Это может вернуть 0, когда результат был на самом деле должен быть не целым числом, как 0,125. Для расчета нужно использовать float вместо целых чисел. Вы можете сделать это в Python 2.5 с помощью float (m). В Python 3.0 оператор деления делает то, что вы хотите по умолчанию.

+0

Спасибо всем! я уже поняла! – blur959

3

/ делает целочисленное деление в python2, это означает, что a/b является самым большим числом c с c*b <=a, так 7/3 действительно 2. Вы хотите поплавки, поэтому вам нужно их использовать. Замените все int на float в вашем коде.

Вы, вероятно, следует еще раз взглянуть на функции тоже ... Вы код может быть гораздо гораздо короче :-)

+0

Обратите внимание, что неявное int-деление, как правило, считается ошибкой, и оно изменяется на Python 3. См. Http://www.python.org/dev/peps/pep-0238/ – bobince

0

В Python 2.x, деления целого числа на другое целое число результатов в виде целого числа. Используйте либо from __future__ import division, либо превратите один из целых чисел в поплавок, передав его float().

+0

Обращение одного из них наугад не всегда достаточно. 'float (5) + 6/7', например, возвращает 5.0. Чтобы узнать, какой из них следует изменить на поплавок, вы должны понимать правила оценки. Я подозреваю, что плакат не понимает этого, поэтому лучше советом для него является изменение * всех их * на поплавки. –

0

Проблема в том, что вы используете целочисленную арифметику - см. Все эти int звонки, которые у вас есть повсюду. Целочисленная арифметика (в Python 2.x) только вернет целые числа, поэтому вы никогда не получите 2,33, только 2.

Используйте float() вместо int(), и все должно сработать.

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