Как проверить, является ли переменная строковой или целой? - PullRequest
1 голос
/ 28 марта 2020

У меня есть вопрос о том, как предупредить пользователя о вводе 'string' вместо 'integer', но мне кажется, что я не могу выполнить итерацию l oop, если введено значение пользователя integer, и снова спросить please enter string

Пример отсюда

http://pythontutor.com/visualize.html#mode = edit

catNames = []

while True:

    print("Enter the name of cat " + str(len(catNames) + 1) + ' (Or enter nothing to stop):' )

    while True:

        name = input()

        try:
            name = int(name)

        except ValueError:

            print('please enter string')
            pass    

    if name == '':
        break

    catNames = catNames + [name] # list concatenation

print('The cat names are :')
for i in catNames:
    print(' ' + i)

Ответы [ 2 ]

3 голосов
/ 28 марта 2020

Возможное решение:

catNames = []

while True:
    print("Enter the name of cat " + str(len(catNames) + 1) + ' (Or enter nothing to stop):' )
    name = input()
    if name.isalpha():
        catNames = catNames + [name] # list concatenation
    elif name == '':
        break
    else:
        print("Please enter a string")


print('The cat names are :')
for i in catNames:
    print(' ' + i)
1 голос
/ 28 марта 2020

Один while достаточно, если пользователь вводит целое число, вы можете «сбросить» значение:

catNames = []

while True:
    print("Enter the name of cat " + str(len(catNames) + 1) + ' (Or enter nothing to stop):' )
    name = input()

    if name.strip() == '':
        # no input
        print("exiting!")
        break

    try:
        name = int(name)
        name = None
        print("Please enter a string")
    except ValueError:
        pass
    finally:
        if name is not None:
            catNames.append(name)


print('The cat names are :')
for i in catNames:
    print(' ' + i)
...