Как мне исправить функцию python, которая не позволяет мне вводить переменные? - PullRequest
0 голосов
/ 22 апреля 2020

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

Вот код:

def sum_sides(side1,side2,side3,side4):

    side1=0
    side2=0`
    side3=0
    side4=0
    side1=int(input("Enter side 1"))
    side2=int(input("Enter side 2"))
    side3=int(input("Enter side 3"))
    side4=int(input("Enter side 4"))
    sum=side1+side2+side3+side4
    return ()
    if (x %4==0):
        print("Forms a square with perimeter of ",sum)
    elif (x %2==0):
        print("Forms a rectangle with perimeter of ",sum)
    else:
        print("Does not form a rectangle or square.")

Что я хочу, чтобы вывод читался: Пример 1:

Enter side 1
> 5
Enter side 2
> 3
Enter side 3
> 3
Enter side 4
> 5
Forms a rectangle with perimeter of 16

С нетерпением ждем отзывов.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2020

Я буду go по частям кода, чтобы объяснить, что происходит:

def sum_sides(side1, side2, side3, side4):
    side1=0
    side2=0`
    side3=0
    side4=0
    side1=int(input("Enter side 1"))
    side2=int(input("Enter side 2"))
    side3=int(input("Enter side 3"))
    side4=int(input("Enter side 4"))

Ваша функция начинается с четырех аргументов (side1...4), но она не использует ценности, которые были переданы в; вместо этого он заменяет эти значения сначала на 0, а затем на ввод от пользователя. Если вы хотите, чтобы эта функция принимала параметры, то вход должен поступать извне функции; если вы хотите, чтобы эта функция обрабатывала ввод, тогда ей не нужно принимать параметры.

    sum = side1 + side2 + side3 + side4

Пока все хорошо! Теперь sum содержит сумму четырех сторон (тех, которые вы получили от input()), а не тех, которые были переданы в вашу функцию). Обратите внимание, что присвоение имени переменной sum обычно является плохой идеей, поскольку оно конфликтует с именем очень полезной функции sum, встроенной в Python (работа которой, как вы уже догадались, заключается в получении суммы вещей). Было бы лучше назвать это perimeter, так как это то, что мы называем суммой сторон формы.

    return ()

И теперь мы закончили - мы возвращаем () ( пустой кортеж) звонящему. Значение sum никогда не используется и исчезает в пустоте.

    if (x % 4 == 0):
        print("Forms a square with perimeter of ",sum)
    elif (x % 2==0):
        print("Forms a rectangle with perimeter of ",sum)
    else:
        print("Does not form a rectangle or square.")

Этот код никогда не будет выполнен, но если он это сделает, он немедленно вызовет ошибку, потому что x никогда не был определен.

Вот пример того, как вы могли бы реализовать часть, которую вы сделали до сих пор (предлагая пользователю четыре стороны и затем суммируя их) таким образом, чтобы сделать возможным выполнение следующей части:

from typing import List


def get_sides_from_user() -> List[int]:
    """Prompts the user to enter four ints,
    representing the four sides of a quadrilateral."""
    return [int(input(f"Enter side {n}: ")) for n in range(1, 5)]


def get_and_sum_sides() -> None:
    """Get sides from the user and then print interesting information."""
    # Get the four sides.
    sides = get_sides_from_user()  

    # Sum them up!
    perimeter = sum(sides)
    print(f"The perimeter is {perimeter}.")

    # Now how do we figure out whether it's a square or not?


if __name__ == '__main__':
    get_and_sum_sides()
0 голосов
/ 22 апреля 2020

Проблема в том, что код немного избыточен. Ваша функция нуждается в аргументах (side1, side2, side3, side4). Эти аргументы передаются при вызове функции, и без них ваша функция не работает.

После ожидания аргументов вы переназначаете аргументы (стороны) на 0. Таким образом, не имеет значения, если вы вызовите функцию с аргументами, так как позже вы установите их равными 0. Затем вы снова запрашиваете стороны с помощью ввода.

Кроме того, «возврат» должен действительно что-то возвращать. Это может быть, например, строка, число или переменная.

Итак, правильный способ сделать это:

1 (если у вас нет значений сторон пока что) - включает «бонус» проверки, является ли пользовательский ввод целочисленным значением. При необходимости можно изменить на float:

def sum_sides():
    sidesList = []
    for i in range(4):
        while True:
            side = input(f"Enter side {i+1}: ")
            try:
                int(side)
                sidesList.append(int(side))
                break
            except: print('Please enter a valid number (integer)')
    perimeter = sum(sidesList)

    if (perimeter %4 == 0):
        print("Forms a square with perimeter of ", perimeter)
    elif (perimeter %2 == 0):
        print("Forms a rectangle with perimeter of ", perimeter)
    else:
        print("Does not form a rectangle or square.")

    return perimeter



perimeter = sum_sides()
print(perimeter)

2 (если у вас уже есть значения каждой стороны):

def sum_sides_2(side1, side2, side3, side4):
    sidesList = [side1, side2, side3, side4]
    perimeter = sum(sidesList)

    if (perimeter %4 == 0):
        print("Forms a square with perimeter of ", perimeter)
    elif (perimeter %2 == 0):
        print("Forms a rectangle with perimeter of ", perimeter)
    else:
        print("Does not form a rectangle or square.")

    return perimeter



perimeter = sum_sides_2(5, 3, 3, 5)
print(perimeter)
0 голосов
/ 22 апреля 2020

Попробуйте так:

def sum_sides():
    side1=int(input("Enter side 1\n>"))
    side2=int(input("Enter side 2\n>"))
    side3=int(input("Enter side 3\n>"))
    side4=int(input("Enter side 4\n>"))
    sum=side1+side2+side3+side4
    if (sum %4==0):
        print("Forms a square with perimeter of ",sum)
    elif (sum %2==0):
        print("Forms a rectangle with perimeter of ",sum)
    else:
        print("Does not form a rectangle or square.")

sum_sides ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...