2016-04-04 3 views
0

Я делаю программу, которая определяет, является ли треугольник тупой (O), острый (A) или вправо (R)ввод списка значений в функцию

Enter in the length of angles 
>>> 3 8 9 
TypeError: pythag() takes exactly 3 arguments (1 given) 

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

input = raw_input("Enter in the length of angles\n>>> ") #>>> 3 8 9 
lst = input.split() #splits the input into a list by whitespace 
for i in lst: #converts the values in the list to integers 
    int(i) 

def pythag(a,b,c): #function to perform calculation 
    if a^2 + b^2 != c^2: 
     if c^2 > a^2 or b^2: 
      return "A" 
     else: 
      return "O" 
    else: 
     return "R" 

pythag(lst) 

Любые предложения?

Заранее спасибо.

+1

'pythag (* lst)' выполнит эту работу. Связано: http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-python-parameters –

ответ

3

Прежде всего, int(i) ничего не делает для первоначального списка, поэтому он по-прежнему содержит строки. Во-вторых, где происходит ваше исключение, заключается в том, что вы все еще передаете один аргумент функции.

lst = [int(i) for i in lst] # convert the input 
pythag(*lst) # same as pythag(lst[0], lst[1], ...) 
+0

Не могли бы вы рассказать о том, почему мой оригинальный цикл for не конвертирует элементы списка в целые числа? – avbirm

+1

@avbirm 'int (i)' преобразует переданный аргумент в целое число без изменения его значения (которое в нашем случае является строкой и, как таковое, неизменно в любом случае). Даже если вы написали 'i = int (i)' в том же цикле, это не повлияло бы на исходный список, потому что он просто переименовал бы имя 'i' в новое значение. – bereal

+0

Получил это, так что в основном разница заключается в том, что преобразование значений в int с помощью «lst =» вместо того, чтобы просто писать цикл for, который модифицирует только i. – avbirm

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