Почему я не могу получить правильный ответ? - PullRequest
0 голосов
/ 30 мая 2020

Код на Github

Маленький программист, ищущий помощи, пожалуйста. Что пошло не так в моем коде, если кто-нибудь может помочь?

Очень простая python программа для сравнения двух чисел с помощью функций

from sys import exit

def main():
    check()
    compare(x, y)

def check():
    # prompt user for two numbers
    x = input("x: ")
    y = input("y: ")

    # apply sanity check
    if x.isnumeric() == False and y.isnumeric() == False:
        print("Usage: only real numbers are accepted.")
        exit(1)
    else:
        return x, y

def compare(x, y):
    # TODO
    if x < y:
        return print("x is smaller than y")
    elif x > y:
        return print("x is greater than y")
    else:
        return print("They are the same!")

main()

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Вы делаете частую ошибку.

1- Вы создали две функции check() и compare(), и вы работаете с x и y в обеих из них. Но любая переменная, которая определена в функции, имеет область видимости только в этой функции. Таким образом, вы можете использовать x и y только в функции проверки, поскольку они определены там. Чтобы использовать переменные в нескольких функциях, вы можете объявить их как глобальные. Затем к переменным можно получить доступ из любой функции.

2- Другая ошибка заключается в том, что вы передаете x и y в качестве аргументов для функции сравнения, но поскольку x и y доступны только для проверки, поэтому выдает ошибку. Я удалил аргументы и вместо этого работал с глобальным подходом.

См. Код ниже:

from sys import exit

def main():
    check()
    compare()

def check():
    #initialising x and y as global
    global x, y
    # prompt user for two numbers
    x = input("x: ")
    y = input("y: ")

    # apply sanity check
    if x.isnumeric() == False and y.isnumeric() == False:
        print("Usage: only real numbers are accepted.")
        exit(1)
    else:
        return x, y

def compare():
    global x, y
    if x < y:
        return print("x is smaller than y")
    elif x > y:
        return print("x is greater than y")
    else:
        return print("They are the same!")

main()

Результат для x = 5 и y = 3 в качестве тестового примера -

x is greater than y
0 голосов
/ 30 мая 2020
  1. Если не преобразовать x, y в int, он сравнит x, y как строку (порядок словаря)
  2. вы должны проверить x, y - это число или, а не и
from sys import exit

def main():
    x, y = check()
    compare(x, y)

def check():
    # prompt user for two numbers
    x = input("x: ")
    y = input("y: ")

    # apply sanity check
    if x.isnumeric() is False or y.isnumeric() is False:
        print("Usage: only real numbers are accepted.")
        exit(1)
    else:
        return x, y

def compare(x, y):
    x = int(x)
    y = int(y)
    # TODO
    if x < y:
        return print("x is smaller than y")
    elif x > y:
        return print("x is greater than y")
    else:
        return print("They are the same!")

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