2014-11-30 4 views
0

Я пишу программу, которая вычисляет объем конуса, учитывая диаметр и высоту, но я получаю этуTypeError: конус() отсутствует 1 необходимые позиционная аргумент: «высоту»

TypeError: cone() missing 1 required positional argument: 'height' 

Как исправить это?

def main(): 
    measure = measurement() 
    vol = cone(measure) 

    print("\nThe volume of the cone is,", "%0.2f" % (vol)) 

def measurement(): 
    diameter = eval(input("Enter the diameter of the cones base:")) 
    height = eval(input("Enter the height of the cone:")) 
    return diameter, height 

def cone(diameter, height): 
    pi = 3.14 
    radius = diameter/2 
    volume = (pi * (radius**2) * height)/3 
    return volume 

main() 
+0

Некоторые из кода выглядят так, как будто они написаны для Python 3; вы на самом деле используете Python 2.7? В Python 2.x вы, вероятно, получите 'TypeError' на' eval() ', прежде чем вы дойдете до кода, в котором вы получаете ошибку, о которой вы спрашиваете. Кроме того, вызов 'print()' выглядит как стиль Python 3. – kindall

ответ

2

Вы должны отщепляются два значения, возвращаемые measurement. У вас есть два варианта:

  1. Используйте назначение кортежа и передать два результата в cone:

    diameter, height = measurement() 
    vol = cone(diameter, height) 
    

    Python ожидает measurement() вернуть два значения в последовательности теперь и будут назначать эти два значения diameter и height, прежде чем передавать эти два значения отдельно на cone().

  2. Использование расширения аргументов; это просит Python, чтобы применить все значения в последовательности, как отдельные аргументы:

    measure = measurement() 
    vol = cone(*measure) 
    

    Обратите внимание на * до measure аргумента.

Как для measurement() функции: вам не нужно использовать eval(); это создает угрозу безопасности. Вместо этого используйте float() интерпретировать ввод данных пользователя в качестве действительных чисел:

def measurement(): 
    diameter = float(input("Enter the diameter of the cones base:")) 
    height = float(input("Enter the height of the cone:")) 
    return diameter, height 

Также см Asking the user for input until they give a valid response для более продвинутых методов пользовательского ввода.

+0

Он использует Python 3, о чем свидетельствуют его вызовы 'print()', поэтому нет 'raw_input()' – kindall

+0

@kindall: OP помечен вопрос с помощью 'python-2.7' (я добавил тег' python'). Нагрузки начинающих программистов на Python используют 'print', как если бы это была функция в Python 2, и это работает большую часть времени. –

+0

Если он использовал Python 2.x, он получал бы 'TypeError' на' eval() 'целочисленного ввода до того, как даже попал туда, где он получил ошибку. Я думаю, что тег должен быть неправильным. – kindall

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