Сомнения по поводу того, почему «для» не работает (питон) - PullRequest
0 голосов
/ 19 октября 2018

Я изучаю Python с самого начала, и я пытаюсь сделать калькулятор, чтобы выучить основы.

       print("Entre com os 2 valores: ")
        y = input()
        z = input()
       for a in y:
           if a == '.' or a == ',':
               num1 = float(y)
           else:
               num1 = int(y)

       for a in z:
            if a == '.' or a == ',':
                num2 = float(z)
            else:
                num2 = int(z)

    soma = num1 + num2
     print(soma)

Я пытаюсь проверить каждый символ в строке, где значенияБыли введены с использованием for, и если на входе одного из значений есть точка, оно должно быть преобразовано в число с плавающей точкой, если нет, в целое число

Но кажется, что условие for никогда не выполняется, даже еслиесли я введу число типа с плавающей точкой, потому что появляется ошибка, что он пытается конвертировать в int

Что я делаю не так?

1 Ответ

0 голосов
/ 19 октября 2018
   for a in y:
       if a == '.' or a == ',':
           num1 = float(y)
       else:
           num1 = int(y)

тестирует все символов строки и преобразует в число с плавающей точкой, если находит точку или запятую, в противном случае он преобразуется в целое число.

Это означает, что он будет преобразован несколько раз(неправильно) целое число или число с плавающей точкой.

Только не делайте этого.Используйте метод try и catch, начиная с наиболее ограниченного типа, который является int, поскольку float также принимает целое число:

try:
   num1 = int(y)
except ValueError:
   try:
     num1 = float(y)
   except ValueError:
      print("{} isn't an int or float".format(num1)
      raise

Пусть python выполнит для вас анализ (который может быть сложным)особенно в случае с плавающей точкой с показателями, знаками ...)

(обратите внимание, что 1,45 не является действительным с плавающей точкой, если вы не выполните num1 = num1.replace(",","."))

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