Ishita07 Ответов: 2

Я пытаюсь написать код для вычисления квадратного корня до 2 десятичных знаков с помощью циклов.


Мой код выглядит следующим образом:
s = 18
x = 0.000
g = 0
a = -1
for n in range(0,3):
    while((x+(a/10**(n)))**2 <= s and x <= s/2 and a <= 9):
        a = a+1
        x = x + a/10**(n)
        g = g+1
        print(x)
        print(g)
        print(n)
        print(a)

y = format(x,'.2f')
y


Что я уже пробовал:

Я получаю 4.00 в качестве ответа. Я хотел знать, почему я не могу выйти за пределы 4.0 и проверить 4.1 и так далее.

Richard MacCutchan

Пожалуйста, правильно отформатируйте свой код между тегами "pre", чтобы мы могли видеть отступы.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Я просто запустил это и получил следующий результат:

x:  0.0
g:  1
n:  0
a:  0
x:  1.0
g:  2
n:  0
a:  1
x:  3.0
g:  3
n:  0
a:  2
x:  3.3
g:  4
n:  1
a:  3
x:  3.6999999999999997
g:  5
n:  1
a:  4
x:  4.199999999999999
g:  6
n:  1
a:  5
y:  4.20


Рейтинг:
1

Thomas Daniels

В Python 3, y это 4.20.

В Python 2 это действительно 4.00, поэтому я предполагаю, что вы используете эту версию. И есть причина: в Python 2 деление между двумя целыми числами также возвращает целое число, тогда как на самом деле вы хотите получить число с плавающей запятой в качестве результата. (В Python 3 деление по умолчанию является делением с плавающей запятой и // делает ли целочисленное деление)

Есть два возможных решения, чтобы исправить это:

Один из способов-сделать все ваши начальные переменные плавающими, например так:

s = 18.0
x = 0.000
g = 0.0
a = -1.0
Теперь все подразделения (напр. a / 10) АР float / int деления, которые приводят к поплавку.

Другой вариант, который не требует вышеизложенного, заключается в том, чтобы сказать Python использовать деление с плавающей запятой во всех случаях, добавив эту строку в верхнюю часть вашего файла кода:
from __future__ import division