Victor Surozhtsev
Просветленный
(34193)
4 года назад
Чё ты мучаешься? Про тип рациональных дробей слышал? Вот им как раз здесь и можно воспользоваться !
import fractions
a,b=map(fractions.Fraction,input('> ').split(' '))
c=input('+ - × ÷ > ')
if c=='÷':print(a/b)
Вводишь данные:
> 1 1е-18
+ - × ÷ > ÷
И получаешь ответ безо всяких дурацких девяток:
1000000000000000000
Aleks Nots
Просветленный
(22644)
4 года назад
x = 1/1e-18
print("%.e"%x)
Вывод
===============
1e+18
>>>
Но, если вывести так
x = 1/1e-18
print("%.f"%x)
То выведет
===============
999999999999999872
>>>
Это потому, что вещественные числа имеют конечную точность и в компе они хранятся в двоичном виде, поэтому недвоичные (например десятичные) дроби не могут точно передаваться.
while True:
try:
x = float(input('Введите первое число: '))
znak = input('Выберите действие (+ - * /): ')
if znak in ('*','/','-','+'):
y = float(input('Введите второе число: '))
if znak == '*':
print(x, '*', y, '=', x * y)
elif znak == '+':
print(x, '+', y, '=', x + y)
elif znak == '-':
print(x, '-', y, '=', x - y)
elif znak == '/':
if y != 0:
print(x, '/', y, '=', x / y)
else:
print('На ноль делить нельзя!')
else:
print('Введён неверный знак действия!')
except ValueError:
print('В поле для числа был введён неправильный символ!')