Проверка, образуют ли три входа треугольник - PullRequest
1 голос
/ 05 апреля 2020

Итак, я хочу взять три ввода от пользователя и проверить, образуют ли они треугольник. Теперь я хочу, чтобы моя программа проверила, используя любые три случайных значения из заданных входов, и проверила, a + b> c .Здесь мой код для этого:

def check_triangle(a, b, c):
  a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
  x, y, z = [int(num) for num in [a, b, c]]
  list_1 = [x, y, z]
  def is_triangle(x, y, z):
    for i in list_1:
      if (list_1[i] <(list_1[i+1] + list_1[i+2])):
        print("Yes")
      else:
        print("No")

check_triangle(a, b, c)

Но я не получаю вывод. В чем ошибка

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

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

def check_triangle(a, b, c):
  a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
  x, y, z = [int(num) for num in [a, b, c]]
  list_1 = [x, y, z]
  def is_triangle(x, y, z):
    for i in list_1:
      if (list_1[i] <(list_1[i+1] + list_1[i+2])):
        print("Yes")
      else:
        print("No")
   is_triangle(x,y,z)

Отступы могут быть испорчены, потому что я ' Я отвечаю по телефону, извините за это. Кроме того, из того, что я вижу, вы получите список ошибок вне диапазона в этой строке.

if (list_1 [i] <(list_1 [i + 1] + list_1 [i + 2])) </p>

Это происходит потому, что ваш i на самом деле является элементом вашего списка, как определено в строке ниже, а не индексом, но вы пытаетесь получить элемент из списка по его индексу с синтаксисом my_list [index ].

для i в list_1

То, что вы хотите сделать вместо упомянутого выше для l oop, - это итерация в диапазоне его длины, то есть итерация по возможным индексам в списке , сделано так:

для i в диапазоне (len (list_1))

Я заметил несколько других вещей в вашем коде и много возможностей для улучшения, но я надеюсь, что вы можете Остальное сделай сам!

0 голосов
/ 05 апреля 2020

Для начала, поскольку a, b и c являются переменными, вводимыми пользователем, их не нужно вводить в функцию в качестве аргументов. Фактически, поскольку они не определены до того, как переданы в качестве аргументов функции, она вызывает функцию NameError с сообщением name 'a' is not defined при ее вызове. Чтобы устранить эту проблему, вы можете удалить a, b и c в качестве аргументов вашей функции как в ее определении, так и в ее использовании.

На этом этапе функция будет работать, но даже если пользователь введет числа в формате, ожидаемом вашей программой (т.е. разделенными одиночными пробелами - которые явно не указаны для пользователя), часть вашей программы, которая оценивает ваше целевое условие, не будет выполняться, потому что она содержится в функции is_triangle (x, y г) который не называется. Эта функция может быть исключена, и ваше тестовое состояние может быть оценено в основной функции. Кроме того, нет необходимости выполнять l oop через элементы в списке, так как вы можете напрямую получить доступ к его элементам для оценки вашего целевого состояния.

Вот код с этими изменениями:

# since a, b and c are given by the user, they do not need to be arguments to the function
def check_triangle():

    a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
    x, y, z = [int(num) for num in [a, b, c]]
    list_1 = [x, y, z]

    # evaluate your test condition directly within the main function. no secondary function is necessary    
    # as you want to check that c < a + b, access those elements directly by using the index of the list. no loop is necessary
    if list_1[2] < list_1[0] + list_1[1]:
        print("Yes")
    else:
        print("No")

# since a, b and c are not defined before running the function, they cause it to raise a NameError if they are given
check_triangle()

Этот код запустится и оценит ваше целевое состояние. Тем не менее, это условие (что c

0 голосов
/ 05 апреля 2020

вы принимаете ввод от пользователя, поэтому вам не нужно передавать какие-либо аргументы для вашей функции check_triangle:

def is_triangle(x, y, z):
    if x < y + z:
        print("Yes")
    else:
        print("No")


def check_triangle():
    x, y, z = map(int, input('Enter the stick lengths: ').split())
    is_triangle(x, y, z)

check_triangle()

или вы можете упростить свой код, например:

def is_triangle(x, y, z):
    print('Yes' if x < y + z else 'No')

is_triangle(*map(int, input('Enter the stick lengths: ').split()))
...