Найти - Пользователи
Полная версия: Простой вопрос(заклинило, не могу понять проблему)
Начало » Python для новичков » Простой вопрос(заклинило, не могу понять проблему)
1 2 3 4 5 6
Dimazzzzzz
Ed
Ну, код конечно серьезный. Давайте пооптимизируем, может чего получше сделаем. Для начала давайте избавимся от 10 списков Typ1 - Typ10. Вместо этого попользуем один двумерный, вот такой:
Typs = [[]] * 10

И добавлять в него нужно так:
Typs[0].append(...

Справитесь?
Справился Теперь все данные загнались в одну переменную Typs
Ed
Показывайте. после каждого изменения проверяйте работает ли код. Обязательно.
Dimazzzzzz
Ed
Показывайте. после каждого изменения проверяйте работает ли код. Обязательно.
Работает конечно) я уже привык проверять за месяц изучения питона и написания данной проги. Вот новый код, я тут еще по ходу дату добавил. Преобразование в массив пока закомментил, может какой лучше способ найдется.
#-*- coding: cp1251 -*-
"""
Created on Tue Jun 05 19:35:11 2012
@author: Dimazzzzzz
"""#/usr/bin/python
import urllib
import numpy as np
rasnost = []
Data =[]
Blitz1 = []
Stavka2 = []
Igrok2 = []
Typs = [[]] * 10
for J in xrange(803311460, 803311500):
 url='http://www.vezetmne.ru/auctions/'+str(J)
 urllib.urlretrieve(url=url, filename='COD.html')
 infile = open('COD.html')
 lines = infile.readlines()
 print J
 for i in range(len(lines)):
    line = lines[i]# так короче
    if 'cbid=alterStep' in line:
       rasnost.append(np.float(line.strip()[24:28]))
    if 'item_bigcell' in line:
        type1 = lines[i+1].strip()[10:40]
        type2 = lines[i+2].strip()[10:40]
        type3 = lines[i+3].strip()[10:40]
        type4 = lines[i+4].strip()[10:40]
        type5 = lines[i+5].strip()[10:40]
    if 'Аукцион завершен' in line:
        Data.append(line.strip()[-28:-19])
    if 'Блиц-цена' in line:
        Origin = line.strip()[91:97]
        if '.' in Origin:
            Orig = Origin[0:5]
        else:
            Orig = Origin
        if '.' in Orig:
            AA = Orig[0:4]
        else:
            AA = Orig
        if '.' in AA:
            BB = AA[0:3]
        else:
            BB = AA
        if '.' in BB:
            Blitz1.append(np.int(BB[0:2]))
        else:
            Blitz1.append(np.int(BB))
    if '<div class="history" id="history">' in line:
       Stavka1 = lines[i+3].strip()[21:50]# stavka.append(line.strip()[21:30])
       Stavka2.append(np.float(Stavka1[0:Stavka1.find('р')]))
       Igrok1 = lines[i+3].strip()[21:-24]  # А вот для ника возьмем с минусом
       Igrok2.append(Igrok1[Stavka1.find('р')+26:])
       if 'Участ' in type1:
           ty1 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type1:
           ty1 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type1:
           ty1 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type1:
           ty1 = 4 #'Дневной'(+)
       elif 'Один' in type1:
           ty1 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type1:
           ty1 = 6 #' Для новичков' (+)
       elif 'Ставк' in type1:
           ty1 = 7 #'На понижение'
       elif 'Фикс' in type1:
           ty1 = 8 #'Фиксированная цена'
       elif '100' in type1:
           ty1 = 9 #'100% скидка'
       elif 'Бесп' in type1:
           ty1 = 10 #'Бесплатные ставки'
       else:
           ty1 = 0
           
       if 'Участ' in type2:
           ty2 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type2:
           ty2 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type2:
           ty2 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type2:
           ty2 = 4 #'Дневной'(+)
       elif 'Один' in type2:
           ty2 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type2:
           ty2 = 6 #' Для новичков' (+)
       elif 'Ставк' in type2:
           ty2 = 7 #'На понижение'
       elif 'Фикс' in type2:
           ty2 = 8 #'Фиксированная цена'
       elif '100' in type2:
           ty2 = 9 #'100% скидка'
       elif 'Бесп' in type2:
           ty2 = 10 #'Бесплатные ставки'
       else:
           ty2 = 0
           
       if 'Участ' in type3:
           ty3 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type3:
           ty3 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type3:
           ty3 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type3:
           ty3 = 4 #'Дневной'(+)
       elif 'Один' in type3:
           ty3 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type3:
           ty3 = 6 #' Для новичков' (+)
       elif 'Ставк' in type3:
           ty3 = 7 #'На понижение'
       elif 'Фикс' in type3:
           ty3 = 8 #'Фиксированная цена'
       elif '100' in type3:
           ty3 = 9 #'100% скидка'
       elif 'Бесп' in type3:
           ty3 = 10 #'Бесплатные ставки'
       else:
           ty3 = 0
           
       if 'Участ' in type4:
           ty4 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type4:
           ty4 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type4:
           ty4 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type4:
           ty4 = 4 #'Дневной'(+)
       elif 'Один' in type4:
           ty4 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type4:
           ty4 = 6 #' Для новичков' (+)
       elif 'Ставк' in type4:
           ty4 = 7 #'На понижение'
       elif 'Фикс' in type4:
           ty4 = 8 #'Фиксированная цена'
       elif '100' in type4:
           ty4 = 9 #'100% скидка'
       elif 'Бесп' in type4:
           ty4 = 10 #'Бесплатные ставки'
       else:
           ty4 = 0
           
       if 'Участ' in type5:
           ty5 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type5:
           ty5 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type5:
           ty5 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type5:
           ty5 = 4 #'Дневной'(+)
       elif 'Один' in type5:
           ty5 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type5:
           ty5 = 6 #' Для новичков' (+)
       elif 'Ставк' in type5:
           ty5 = 7 #'На понижение'
       elif 'Фикс' in type5:
           ty5 = 8 #'Фиксированная цена'
       elif '100' in type5:
           ty5 = 9 #'100% скидка'
       elif 'Бесп' in type5:
           ty5 = 10 #'Бесплатные ставки'
       else:
           ty5 = 0
       Typs[0].append((1 if ty1 == 1 or ty2 == 1 or ty3 == 1 or ty4 == 1 or ty5 == 1 else 0))
       Typs[1].append((1 if ty1 == 2 or ty2 == 2 or ty3 == 2 or ty4 == 2 or ty5 == 2 else 0))
       Typs[2].append((1 if ty1 == 3 or ty2 == 3 or ty3 == 3 or ty4 == 3 or ty5 == 3 else 0))
       Typs[3].append((1 if ty1 == 4 or ty2 == 4 or ty3 == 4 or ty4 == 4 or ty5 == 4 else 0))
       Typs[4].append((1 if ty1 == 5 or ty2 == 5 or ty3 == 5 or ty4 == 5 or ty5 == 5 else 0))
       Typs[5].append((1 if ty1 == 6 or ty2 == 6 or ty3 == 6 or ty4 == 6 or ty5 == 6 else 0))
       Typs[6].append((1 if ty1 == 7 or ty2 == 7 or ty3 == 7 or ty4 == 7 or ty5 == 7 else 0))
       Typs[7].append((1 if ty1 == 8 or ty2 == 8 or ty3 == 8 or ty4 == 8 or ty5 == 8 else 0))
       Typs[8].append((1 if ty1 == 9 or ty2 == 9 or ty3 == 9 or ty4 == 9 or ty5 == 9 else 0))
       Typs[9].append((1 if ty1 == 10 or ty2 == 10 or ty3 == 10 or ty4 == 10 or ty5 == 10 else 0))
print rasnost, '\n', Blitz1, '\n', Stavka2, '\n', Igrok2, '\n', Data
W = np.array(rasnost)
Blitz = np.array(Blitz1) 
Stavka = np.array(Stavka2)
#Mtyp1 = np.array(Typ1)
#Mtyp1 = np.array(Typ1)
#Mtyp2 = np.array(Typ2)
#Mtyp3 = np.array(Typ3)
#Mtyp4 = np.array(Typ4)
#Mtyp5 = np.array(Typ5)
#Mtyp6 = np.array(Typ6)
#Mtyp7 = np.array(Typ7)
#Mtyp8 = np.array(Typ8)
#Mtyp9 = np.array(Typ9)
#Mtyp10 = np.array(Typ10)
Ed
Хорошо. Следующее задание - заменить 5 одинаковых блоков кода типа
      if 'Участ' in type1:
ty1 = 1 # Не требует свободных лотов (+)
elif 'Кажд' in type1:
ty1 = 2 # Ограниченное количество ставок (+)
elif 'Лог' in type1:
ty1 = 3 #'Логины зашифрованы'(+)
elif 'Днев' in type1:
ty1 = 4 #'Дневной'(+)
elif 'Один' in type1:
ty1 = 5 #'С блефом' (+) - Внезапно ОО
elif 'Аукцион для' in type1:
ty1 = 6 #' Для новичков' (+)
elif 'Ставк' in type1:
ty1 = 7 #'На понижение'
elif 'Фикс' in type1:
ty1 = 8 #'Фиксированная цена'
elif '100' in type1:
ty1 = 9 #'100% скидка'
elif 'Бесп' in type1:
ty1 = 10 #'Бесплатные ставки'
else:
ty1 = 0
на цикл из 5ти итераций. результаты складывать в список ty.
В результате вместо 5ти переменных ty1-ty5 должен получиться список ty из 5 элементов. Вперед!
Dimazzzzzz
Ed
Хорошо. Следующее задание - заменить 5 одинаковых блоков кода типа
      if 'Участ' in type1:
ty1 = 1 # Не требует свободных лотов (+)
elif 'Кажд' in type1:
ty1 = 2 # Ограниченное количество ставок (+)
elif 'Лог' in type1:
ty1 = 3 #'Логины зашифрованы'(+)
elif 'Днев' in type1:
ty1 = 4 #'Дневной'(+)
elif 'Один' in type1:
ty1 = 5 #'С блефом' (+) - Внезапно ОО
elif 'Аукцион для' in type1:
ty1 = 6 #' Для новичков' (+)
elif 'Ставк' in type1:
ty1 = 7 #'На понижение'
elif 'Фикс' in type1:
ty1 = 8 #'Фиксированная цена'
elif '100' in type1:
ty1 = 9 #'100% скидка'
elif 'Бесп' in type1:
ty1 = 10 #'Бесплатные ставки'
else:
ty1 = 0
на цикл из 5ти итераций. результаты складывать в список ty.
В результате вместо 5ти переменных ty1-ty5 должен получиться список ty из 5 элементов. Вперед!
Запутался)) Очень много переменных, сам начинаю в них теряться… Непонятно как тогда будет проверяться условие вот тут:
       Typs[0].append((1 if ty[1] == 1 or ty2 == 1 or ty3 == 1 or ty4 == 1 or ty5 == 1 else 0))
       Typs[1].append((1 if ty[1] == 2 or ty2 == 2 or ty3 == 2 or ty4 == 2 or ty5 == 2 else 0))
       Typs[2].append((1 if ty[1] == 3 or ty2 == 3 or ty3 == 3 or ty4 == 3 or ty5 == 3 else 0))
       Typs[3].append((1 if ty[1] == 4 or ty2 == 4 or ty3 == 4 or ty4 == 4 or ty5 == 4 else 0))
Ведь тогда 1 всегда будет находиться в списке, нет?
Ed
Хорошо, давайте тогда по частям. Сделайте для начала сам цикл и покажите что получилось. То, что дальше сделаем потом.
Dimazzzzzz
Ed
Хорошо, давайте тогда по частям. Сделайте для начала сам цикл и покажите что получилось. То, что дальше сделаем потом.
#-*- coding: cp1251 -*-
"""
Created on Tue Jun 05 19:35:11 2012
@author: Dimazzzzzz
"""#/usr/bin/python
import urllib
import numpy as np
rasnost = []
Data =[]
Blitz1 = []
Stavka2 = []
Igrok2 = []
Typs = [[]] * 10
for J in xrange(803311466, 803311500):
 url='http://www.vezetmne.ru/auctions/'+str(J)
 urllib.urlretrieve(url=url, filename='COD.html')
 infile = open('COD.html')
 lines = infile.readlines()
 print J
 for i in range(len(lines)):
    line = lines[i]# так короче
    if 'cbid=alterStep' in line:
       rasnost.append(np.float(line.strip()[24:28]))
    if 'item_bigcell' in line:
        type1 = lines[i+1].strip()[10:40]
        type2 = lines[i+2].strip()[10:40]
        type3 = lines[i+3].strip()[10:40]
        type4 = lines[i+4].strip()[10:40]
        type5 = lines[i+5].strip()[10:40]
    if 'Аукцион завершен' in line:
        Data.append(line.strip()[-28:-19])
    if 'Блиц-цена' in line:
        Origin = line.strip()[91:97]
        if '.' in Origin:
            Orig = Origin[0:5]
        else:
            Orig = Origin
        if '.' in Orig:
            AA = Orig[0:4]
        else:
            AA = Orig
        if '.' in AA:
            BB = AA[0:3]
        else:
            BB = AA
        if '.' in BB:
            Blitz1.append(np.int(BB[0:2]))
        else:
            Blitz1.append(np.int(BB))
    if '<div class="history" id="history">' in line:
       Stavka1 = lines[i+3].strip()[21:50]# stavka.append(line.strip()[21:30])
       Stavka2.append(np.float(Stavka1[0:Stavka1.find('р')]))
       Igrok1 = lines[i+3].strip()[21:-24]  # А вот для ника возьмем с минусом
       Igrok2.append(Igrok1[Stavka1.find('р')+26:])
       for q in xrange(1, 5):
         if 'Участ' in type+str(q):
             tyq = 1 # Не требует свободных лотов (+)
         elif 'Кажд' in type+str(q):
             tyq = 2 # Ограниченное количество ставок (+)
         elif 'Лог' in type+str(q):
             tyq = 3 #'Логины зашифрованы'(+)
         elif 'Днев' in type+str(q):
             tyq = 4 #'Дневной'(+)
         elif 'Один' in type+str(q):
             tyq = 5 #'С блефом' (+) - Внезапно ОО
         elif 'Аукцион для' in type+str(q):
             tyq = 6 #' Для новичков' (+)
         elif 'Ставк' in type+str(q):
             tyq = 7 #'На понижение'
         elif 'Фикс' in type+str(q):
             tyq = 8 #'Фиксированная цена'
         elif '100' in type+str(q):
             tyq = 9 #'100% скидка'
         elif 'Бесп' in type+str(q):
             tyq = 10 #'Бесплатные ставки'
         else:
             tyq = 0
           
         Typs[0].append((1 if tyq == 1 or tyq == 1 or tyq == 1 or tyq == 1 or tyq == 1 else 0))
         Typs[1].append((1 if tyq == 2 or tyq == 2 or tyq == 2 or tyq == 2 or tyq == 2 else 0))
         Typs[2].append((1 if tyq == 3 or tyq == 3 or tyq == 3 or tyq == 3 or tyq == 3 else 0))
         Typs[3].append((1 if tyq == 4 or tyq == 4 or tyq == 4 or tyq == 4 or tyq == 4 else 0))
         Typs[4].append((1 if tyq == 5 or tyq == 5 or tyq == 5 or tyq == 5 or tyq == 5 else 0))
         Typs[5].append((1 if tyq == 6 or tyq == 6 or tyq == 6 or tyq == 6 or tyq == 6 else 0))
         Typs[6].append((1 if tyq == 7 or tyq == 7 or tyq == 7 or tyq == 7 or tyq == 7 else 0))
         Typs[7].append((1 if tyq == 8 or tyq == 8 or tyq == 8 or tyq == 8 or tyq == 8 else 0))
         Typs[8].append((1 if tyq == 9 or tyq == 9 or tyq == 9 or tyq == 9 or tyq == 9 else 0))
         Typs[9].append((1 if tyq == 10 or tyq == 10 or tyq == 10 or tyq == 10 or tyq == 10 else 0))
print rasnost, '\n', Blitz1, '\n', Stavka2, '\n', Igrok2, '\n', Data
W = np.array(rasnost)
Blitz = np.array(Blitz1) 
Stavka = np.array(Stavka2)
#Mtyp1 = np.array(Typ1)
#Mtyp1 = np.array(Typ1)
#Mtyp2 = np.array(Typ2)
#Mtyp3 = np.array(Typ3)
#Mtyp4 = np.array(Typ4)
#Mtyp5 = np.array(Typ5)
#Mtyp6 = np.array(Typ6)
#Mtyp7 = np.array(Typ7)
#Mtyp8 = np.array(Typ8)
#Mtyp9 = np.array(Typ9)
#Mtyp10 = np.array(Typ10)
Вот попытался, не могу объеденить q и type вот тут:
TypeError: unsupported operand type(s) for +: 'type' and 'str'
if 'Участ' in type+str(q):
             tyq = 1 # Не требует свободных лотов (+)
         elif 'Кажд' in type+str(q):
             tyq = 2 # Ограниченное количество ставок (+)
         elif 'Лог' in type+str(q):
             tyq = 3 #'Логины зашифрованы'(+)
         elif 'Днев' in type+str(q):
             tyq = 4 #'Дневной'(+)
         elif 'Один' in type+str(q):
             tyq = 5 #'С блефом' (+) - Внезапно ОО
         elif 'Аукцион для' in type+str(q):
             tyq = 6 #' Для новичков' (+)
         elif 'Ставк' in type+str(q):
             tyq = 7 #'На понижение'
         elif 'Фикс' in type+str(q):
             tyq = 8 #'Фиксированная цена'
         elif '100' in type+str(q):
             tyq = 9 #'100% скидка'
         elif 'Бесп' in type+str(q):
             tyq = 10 #'Бесплатные ставки'
         else:
             tyq = 0
Ed
Подсказка: не нужно их объединять. Нужно положить их в список. Вот, смотрите:
types = [type1, type2, type3, type4, type5]
Тогда внутри вашего цикла можно будет вместо ваших выкрутасов использовать
types[q]
. Понятно ли?
Dimazzzzzz
Ed
Подсказка: не нужно их объединять. Нужно положить их в список. Вот, смотрите:
types = [type1, type2, type3, type4, type5]
Тогда внутри вашего цикла можно будет вместо ваших выкрутасов использовать
types[q]
. Понятно ли?
У меня руки только вот до такого доходят:
       
       types = [type1, type2, type3, type4, type5]
       if 'Участ' in types[1]:
             ty1 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in types[1]:
             ty1 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in types[1]:
             ty1 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in types[1]:
             ty1 = 4 #'Дневной'(+)
       elif 'Один' in types[1]:
             ty1 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in types[1]:
             ty1 = 6 #' Для новичков' (+)
       elif 'Ставк' in types[1]:
             ty1 = 7 #'На понижение'
       elif 'Фикс' in types[1]:
             ty1 = 8 #'Фиксированная цена'
       elif '100' in types[1]:
             ty1 = 9 #'100% скидка'
       elif 'Бесп' in types[1]:
             ty1 = 10 #'Бесплатные ставки'
       else:
             ty1 = 0
Но тут все-равно прийдется писать код 5 раз, поскольку ty1,2,3 не задастся через types…
Ed
Вот так нужно было:
types = [type1, type2, type3, type4, type5]
ty = []
for q in range(len(types)):
if 'Участ' in types[q]:
ty[q] = 1
Попробуйте это осознать и показывайте чего вышло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB