Вопрос

import math
t=raw_input()
k=[]
a=0
for i in range(0,int(t)):
    s=raw_input()
    b=1
    c=1
    a=int(s)
    if a==0:
        continue
    else:
        d=math.atan(float(1)/b) + math.atan(float(1)/c)
        v=math.atan(float(1)/a)
        print v
        print d
        print float(v)
        print float(d)
        while():
            if float(v)== float(d):
                break
            b=b+1
            c=c+1
            d=math.atan(float(1)/float(b)) + math.atan(float(1)/float(c))
            print d
        k.append(int(b)+int(c))

for i in range(0,int(t)):
    print k[i]

поскольку это совершенно очевидно float(v) != float(d) до тех пор , пока b становится 2 и c становится 3.

Это было полезно?

Решение

Твой while циклические тесты на пустом кортеже, результат которого равен False.Таким образом, заявления, содержащиеся в while цикл никогда не выполнится:

Если вы хотите, чтобы ваш while цикл будет выполняться до тех пор, пока не встретится break заявление, сделайте следующее:

while True:
    if (some_condition):
        break
    else:
        # Do stuff...

Другие советы

Очень опасно проводить сравнения типа float(a)==float(b), поскольку переменные с плавающей запятой не имеют точного представления.Из-за ошибок округления у вас могут не быть одинаковых значений.

Даже 2*0,5 может не равняться 1.Вы можете использовать следующее:

if abs(float(a)-float(b)) < verySmallValue:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

Математика с плавающей запятой не является точной.Простые значения, такие как 0.2, не могут быть точно представлены с помощью двоичных чисел с плавающей запятой, а ограниченная точность чисел с плавающей запятой означает, что незначительные изменения в порядке операций могут изменить результат.Разные компиляторы и процессоры архитектуры хранят временные результаты с разной точностью, поэтому результаты будут отличаться в зависимости от деталей вашей среды.Если вы выполните расчет, а затем сравните результаты с некоторым ожидаемым значением, то крайне маловероятно, что вы получите именно тот результат, который вы предполагали. Другими словами, если вы выполните вычисление , а затем выполните это сравнение:if (результат == Ожидаемый результат)

тогда маловероятно, что сравнение будет верным.Если сравнение истинно, то оно, вероятно, нестабильно – незначительные изменения во входных данных значения, компилятор или центральный процессор могут изменить результат и сделать сравнение равным false.

Ну, до точки останова дело не дошло.Проблема в том, что while() вообще не зацикливается.Чтобы сделать бесконечный цикл, выполните while (1): (поскольку условие while должно иметь значение true.Вот рабочий (очищенный) образец.

import math
t = raw_input()
k = []
a = 0.0
for i in range(0,int(t)):
    s = float(raw_input())
    b = 1.0
    c = 1.0
    a= float(s)
    if a == 0:
        continue
    else:
        d = math.atan(1.0/b) + math.atan(1.0/c)
        v = math.atan(1.0/a)
        print v
        print d
        while True:
            if v == d:
                print 'bar'
                break
            b += 1
            c += 1
            d = math.atan(1.0/b) + math.atan(1.0/c)
            print d
        k.append(int(b)+int(c))

for i in range(0,int(t)):
    print k[i]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top