Распознавание строк, состоящих только из чисел - PullRequest
0 голосов
/ 16 декабря 2018

Я пытался закодировать функцию, способную объединить два слова и умножить два числа с плавающей запятой, но у меня возникли проблемы с модулем try-error.Я хочу, чтобы функция также проверяла, состоит ли str из чисел или нет, но это не работает.Не могли бы вы найти проблему?

def funz():
    w1=input('insert a word')
    w2=input('insert a second word')
    n1=input('insert a num')
    n2=input('insert a second num')
    try:
        float(w2), float(w1)
        print('I want a word')
        funz()
    except ValueError:
        try:
            float(n2), float(n1)

            print('\n')
            print(w1+w2)
            print('\n')
            print(float(n1)*float(n2))
        except ValueError:
            print('I said a number!')
            funz()
funz()

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Ваша проблема в выражении try:

try:
    float(w2), float(w1)
    print('I want a word')
    funz()

Обратите внимание, что с помощью этого утверждения вы проверяете, не является ли одно из двух слов float.Как только w1 или w2 не могут быть превращены в float, что означает, что это слово, вы переходите к выражению except.Что неверно, поскольку один из них может быть числовым.

Кстати, вот более простой и понятный способ сделать то же самое:

def funz():

    while True:

        w1=input('insert a word')
        w2=input('insert a second word')
        n1=input('insert a num')
        n2=input('insert a second num')

        if not (str(w1).isalpha()) & str(w2).isalpha():
            print('I want a word')
            continue

        if not (str(n1).isnumeric()) & (str(n2).isnumeric()):
            print('I said a number!')
            continue

        print('\n'+w1+w2+'\n')
        print(float(n1)*float(n2))
        break
0 голосов
/ 17 декабря 2018

Может быть, этот небольшой пример поможет:

while True:
    user_input = input("Please type something: ")
    try:
        user_input = float(user_input)
        print("Your input can be interpreted as a float")
    except:
        print("Your input can *not* be interpreted as a float")
        continue
    break

Это гарантирует, что user_input будет float - в противном случае цикл запустился бы снова снова из-за continue.

Если вы хотите убедиться, что user_input это , а не a float, просто переместите continue:

while True:
    user_input = input("Please type something: ")
    try:
        user_input = float(user_input)
        print("Your input can be interpreted as a float")
        continue
    except:
        print("Your input can *not* be interpreted as a float")
    break
0 голосов
/ 16 декабря 2018

isalpha поможет вам:

if w1.isalpha() and w2.isapha():
    # w1 and w2 have not any numeric values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...