Проблема при проверке ввода пользователя - PullRequest
0 голосов
/ 10 апреля 2020

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

1.1
g=nan   r=nan%  s=nan
2.2
g=nan   r=nan%  s=nan

Код:

def CheckFloat(number):
    try:
        float(number)
        return True
    except ValueError:
        return False

def read_input(period):
    i = 0
    info = []
    nbr = []
    diff = []

    while True:
        try:
            # if not CheckFloat(input()) and input() != "STOP":
            #     exit(84)
            info.append(input())
            if info[i] == "STOP":
                fnc_tendency(period, nbr)
            else:
                nbr.append(float(info[i]))
                if i >= 0:
                    diff.append(nbr[i] - nbr[i - 1])
                    print_res(nbr, period, diff, i)
                i += 1
        except(EOFError, StopIteration):
            exit(84)

Но когда я раскомментирую две строки

# if not CheckFloat(input()) and input() != "STOP":
#     exit(84)

результат выглядит так:

1.1
2.2
g=nan   r=nan%  s=nan

Я теряю одну строчку печати, и я не знаю почему. Может ли кто-нибудь помочь мне с этим, пожалуйста?

1 Ответ

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

Ваша функция с плавающей точкой может быть немного упрощена

def CheckFloat(n):
    return type(n) == float

Иначе, похоже, вы проверяете ввод дважды?

if not CheckFloat(input()) and input() != "STOP":
    exit(84)
info.append(input())


# I think you intended to do something more like this:

val = input()
if CheckFloat(val) and val != "STOP":
    # do something
else:
    # do something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...