Форум сайта python.su
0
Здравствуйте!
Имеется класс:
class Tochki(object): d = 0; s = 0;
m6=[Tochki() for each in range(2003001)]
sh=52.2378+0.0001;k=0.0001; dl=103.9847-0.0001;k1=0.0001; n=0; for i in range(1001): for j in range(2001): m6[j+n].s=sh-k; m6[j+n].d=dl+k1; k1=k1+0.0001; k=k+0.0001; n=n+2001; k1=0.0001;
h=0; for i in range(1001): print m6[h].s h=h+2001
for i in range(2003001): if m6[i].s==52.1791: print i
Офлайн
568
Тебе же позавчера уже все объяснили, про атрибуты класса и атрибуты объекта.
Уже уже тупость какая-то.
Офлайн
0
это работало с массивом, с обычными значениями не работает!
Вот код, здесь я создал массив вне класса:
m=range(1001); sh=52.2378+0.0001;k=0.0001; n=0; for i in range(1001): for j in range(2001): k1=k1+0.0001; m[i]=sh-k; k=k+0.0001; n=n+2001;
print m[587]
if m[587]==52.1791:print "dfgsdfg"
Отредактировано ingushet (Ноя. 4, 2012 07:37:25)
Офлайн
1
Потому что это всё очень похоже на троллинг.
Если нет, то используйте это:
if m[587] == 52.179+0.0001: print "dfgsdfg"
Офлайн
0
Спасибо заработало, а почему не работало:
if m[587]==52.1791:print "dfgsdfg"
Офлайн
1
Потому что арифметика чисел с плавающей точкой иногда бывает весьма коварной штукой. Например первоначальный код заработал бы при условии:
if m[587] == 52.17910000000000536601874046027660369873046875: print "dfgsdfg"
import decimal m = range(1001) sh = 52.2378 + 0.0001 k = 0.0001 k1 = 0.0001 n = 0 for i in range(1001): for j in range(2001): k1 = k1 + 0.0001 m[i] = sh - k k = k + 0.0001 n = n + 2001 print m[587] a = decimal.Decimal(m[587]) if m[587] == a: print "dfgsdfg"
Отредактировано Edinonog (Ноя. 4, 2012 08:45:30)
Офлайн
0
Сделал так:
if round(m1[587],4)==52.1791: print "dkfbvkdfvblsdfvblskfd"
Офлайн
20
> Работает
Потому что повезло, а не потому что правильно сделал. Ну это же первый класс, ну нельзя так делать. Читай про вещественные числа в выч. технике.
Всегда исходи из того что, есть ещё один знак, которого ты не видишь, десятый или сотый после запятой и никогда не используй проверку на равенство вещественных числел. Исключением может быть ноль, но я бы не советовал.
if int(m1[587] * 10000) == 521791: print 'Учи матчасть'
Офлайн