Опрос хранилища данных в python - PullRequest
0 голосов
/ 06 мая 2010

Привет!

Я пытаюсь работать с одним столбцом в хранилище данных, я могу просматривать и отображать содержимое следующим образом:

q = test.all()
q.filter("adjclose =", "adjclose")
q = db.GqlQuery("SELECT * FROM test")

results = q.fetch(5)
for p in results:
    p1 = p.adjclose     
    print "The value is --> %f" % (p.adjclose)

однако мне нужно вычислить исторические значения с помощью столбца приделать, и я не могу преодолеть ошибки

for c in range(len(p1)-1):
    TypeError: object of type 'float' has no len()

вот мой код!

for c in range(len(p1)-1):
    p1.append(p1[c+1]-p1[c]/p1[c])
    p2 = (p1[c+1]-p1[c]/p1[c])
    print "the p1 value<--> %f" % (p2)
    print "dfd %f" %(p1)

новичок в Python, любая помощь будет принята с благодарностью!

заранее спасибо

Ray

ЗДЕСЬ ПОЛНЫЙ КОД

class CalHandler(webapp.RequestHandler):

    def get(self):
        que = db.GqlQuery("SELECT * from test")
        user_list = que.fetch(limit=100)

        doRender(
            self,
            'memberscreen2.htm',
            {'user_list': user_list} )


q = test.all()
q.filter("adjclose =", "adjclose")
q = db.GqlQuery("SELECT * FROM test")

results = q.fetch(5)
for p in results:
    p1 = p.adjclose     
    print "The value is --> %f" % (p.adjclose)
    for c in range(len(p1)-1):
        p1.append(p1[c+1]-p1[c]/p1[c])
        print "the p1 value<--> %f" % (p2)
        print "dfd %f" %(p1)

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Ошибка говорит вам, что значение, связанное с p1, не имеет длины. Это имеет смысл, потому что это float (также в сообщении об ошибке).

Я подозреваю, что вы хотели напечатать p вместо p1. Это отличный пример того, почему вы не должны использовать бессмысленные имена переменных. Это было бы намного легче определить, если бы имена были что-то вроде current_result (вместо p) и current_adjclose вместо p1.

Похоже, вы пытаетесь выполнить какое-то преобразование во внутреннем цикле (это не на 100% ясно из-за имен переменных). Если да, то вам нужно использовать понимание списка .

Кроме того, похоже, вы пытаетесь повторно использовать переменные; нет. В конце концов, их нет недостатка, и это затрудняет выбор значимых имен переменных.

0 голосов
/ 06 мая 2010

Я бы сделал это:

for c in xrange(p1-1)

По сути, звучит так, будто p1 уже содержит len, так что вы можете просто использовать его напрямую. Также обратите внимание, что использование функции xrange обычно немного быстрее, чем range. Причина в том, что xrange возвращает итератор, а range создает список. Другими словами, если бы вы сделали range(1000000), это создаст список из миллиона целых чисел!

...