Программа Python, которая проверяет, имеет ли вход int, float или bool - PullRequest
0 голосов
/ 23 июня 2018

Итак, я пытаюсь создать здесь программу, которая запрашивает ввод, но затем проверяет, имеет ли ввод целое число, логическое значение или число с плавающей запятой, и если у него есть какой-либо из этих символов, он снова запросит ввод. Я хочу сделать это вместо того, чтобы просто писать str(input()), как если бы пользователь вводил int или bool и т. Д., Это выведет ошибку и остановит программу.

Вот то, что у меня есть в данный момент, но оно не работает:

x=input('Enter your name: ')
while True:
    if x==int or x==bool or x==float:
       print('error, incorrect name please try again!')
    else:
       print('Nice name', x, '!')
       break

Если вы можете помочь, пожалуйста, ответьте.

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

Попробуйте использовать ast.literal_eval:

import ast
x = input('Enter your name: ')
try:
   if type(ast.literal_eval(x)) in (bool,float,int):
      print('Error, incorrect name please try again!')

except:
   print('Nice name', x, '!')
0 голосов
/ 23 июня 2018

"проверяет, имеет ли вход целое число, логическое значение или число с плавающей запятой" на самом деле ничего не значит.input всегда возвращает строку, и строка не "имеет целочисленное логическое значение или значение с плавающей запятой", она имеет только символы, точка.Вы должны переосмыслить и переформулировать свои спецификации относительно того, что является приемлемым вводом на основе этого факта (какие наборы / последовательности символов разрешены или запрещены), и только тогда вы сможете написать правильный код проверки.

0 голосов
/ 23 июня 2018

Кажется, вы хотите проверить, что ваше имя включает только буквенно-цифровые символы и потенциально пробелы.Вы можете достичь этого с помощью str.isalpha после разделения по пробелам.

Помните, что input всегда возвращает строку , поэтому вам необходимо использовать строковые методы для проверки ввода пользователя.Вы можете проверить наличие пустых строк, используя if not x в качестве дополнительной проверки.Использование type или isinstance неуместно.

Кроме того, вам необходимо включить input в ваш цикл while, чтобы пользователь мог повторно ввести имя.Вот пример:

while True:
    x = input('Enter your name: ')
    if (not x) or (not all(i.isalpha() for i in x.split())):
        print('Error, incorrect name please try again!')
    else:
        print('Nice name', x, '!')
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...