Question

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]

car il est très évident float(v) != float(d) jusqu'à b devient 2 et 3 c devient.

Était-ce utile?

La solution

Vos tests de boucle de while sur un tuple vide, qui évalue à False. Ainsi, les déclarations dans la boucle de while ne sera jamais exécuter:

Si vous voulez que votre boucle de while à courir jusqu'à ce qu'il rencontre une déclaration de break, faites ceci:

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

Autres conseils

Si est très dangereux de faire comparsisons comme flotteur (a) == float (b) étant donné que les variables flottantes ne sont pas représentés exacte. En raison d'erreurs d'arrondi vous ne pouvez pas avoir des valeurs Identic.

Même 2 * 0,5 peut ne pas être égale 1. Vous pouvez utiliser ce qui suit:

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

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

  

Floating mathématiques points n'est pas exact.   des valeurs simples comme 0.2 ne peuvent pas être   précisément représenté à l'aide binaire   nombres à virgule flottante, et la   précision limitée de la virgule flottante   nombre signifie que de légers changements dans   l'ordre des opérations peut changer la   résultat. Différents compilateurs et CPU   architectures stocker les résultats temporaires   à différents precisions, donc les résultats   diffèrent selon les détails   de votre environnement. Si vous faites une   calcul et comparer les   résultats par rapport à une valeur attendue ce   est très peu probable que vous obtiendrez   exactement le résultat que vous vouliez. Dans   Autrement dit, si vous faites un calcul   puis faire cette comparaison: si   (Résultat == expectedResult)

     

il est peu probable que la   sera vraie. Si la   la comparaison est vrai, alors il est probablement   des changements minuscules dans l'entrée - instable   valeurs, compilateur, ou CPU peuvent changer   le résultat et faire la comparaison soit   faux.

Eh bien, il n'a pas atteint le point de rupture. Le problème est que while() ne fonctionne pas en boucle du tout. Pour faire une boucle infinie, faire while (1): (puisque la condition while doit être évaluée à true. Voici un échantillon de travail (nettoyé).

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]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top