pyuserЧто это дает? В чем улучшение?
попробуйте строку … заменить на …
pyuserЧто это дает? В чем улучшение?
попробуйте строку … заменить на …
jcrowХм. Даже не знаю как на это реагировать. Если не ожидали пользы, то зачем было писать?
Больше спасибо за ответы. В них (внезапно!) много пользы.
EdПросто эмоциональный всплеск. Многие вещи прояснились и упорядочились, потому такая реакция.
Хм. Даже не знаю как на это реагировать. Если не ожидали пользы, то зачем было писать?
EdЭто учебная программа. Я учусь.
- использование argparse не дает вашей программе работать под python ниже 2.7. По-моему это искусственное ограничение. Используйте optparse или вообще выкиньте. У вас один параметр, зачем вам этот парсинг?
- По-моему здесь достаточно пары функций, класс не нужен.
jcrowЕсли бы Вы потрудились отобразить распарсенный документ (etree.tostring()), то сразу заметили бы в ЧЕМ разница. :)
Что это дает? В чем улучшение?
if item.text and item.text.strip():
name = item.text
else:
name = u'Нет имени'
name = item.text if item.text else u"Нет имени"
if domain == '' or domain.endswith(self.domain):
links_internal.append({'name': name, 'url': url})
else:
links_external.append({'name': name, 'url': url})
if domain and not domain.endswith(self.domain):
links_external.append((name, url))
else:
links_internal.append((name, url))
Edни что не мешает его установить :), а многие источники даже настоятельно рекомендуют использовать именно argparse.
использование argparse не дает вашей программе работать под python ниже 2.7
pyuserНикто не мешает установить и десять внешних модулей, не в этом дело. Чем меньше внешних зависимостей, тем лучше. А пока 2.6 а кое-где и 2.5 еще активно используется, а в 2.7 и 3.2 есть optparse, то я бы не торопился. Тем более в таком тривиальном случае.Edни что не мешает его установить :), а многие источники даже настоятельно рекомендуют использовать именно argparse.
использование argparse не дает вашей программе работать под python ниже 2.7
EdКак я Вас понимаю… У нас боевая версия 2.4 :(
А пока 2.6 а кое-где и 2.5 еще активно
import copy
import math
#создать заготовку для матрицы
def nw_matr(dim):
count = 0
Matrix = []
for i in range(dim):
Matrix.append([])
for j in range(dim):
Matrix[i].append([])
return Matrix
#заполнить матрицу
def Mtrx_Gnrt(dim):
count = 1
Matrix = nw_matr(dim)
for i in range(dim):
for j in range(dim):
if(i == j):
Matrix[i][j] = (count + 3)
continue
Matrix[i][j] = Matrix[j][i] = (count)
count += 1
return Matrix
#транспонировать матрицу
def Tran_Mtrx(Matrix, dim):
temp = 0
for i in range(dim):
for j in range(i):
temp = Matrix[i][j]
Matrix[i][j] = Matrix[j][i]
Matrix[j][i] = temp
return Matrix
#умножить матрицу
def Mult_Mtrx(AMatrix, BMatrix, dim):
temp = 0
CMatrix = nw_matr(dim)
for i in range(dim):
for j in range(dim):
temp = 0
for l in range(dim):
temp = temp + AMatrix[i][l]*BMatrix[l][j]
CMatrix[i][j] = temp
return CMatrix
#создать еденичную матрицу
def Idnt_Mtrx(dim):
Matrix = nw_matr(dim)
for i in range(dim):
for j in range(dim):
if(i == j):
Matrix[i][j] = 1;
else:
Matrix[i][j] = 0;
return Matrix
#найти максимальный элемент
def Max_Elem(Matrix, dim):
max = 0
max_i = 0
max_j = 0
for i in range(dim):
for j in range(dim):
if(i == j):
continue
if(abs(Matrix[i][j]) > max):
max = Matrix[i][j]
max_i = i
max_j = j
return [max, max_i, max_j]
#Сам метод
def Jacobi(Matrix, dim, epsilon):
max = 0
max_i = 0
max_j = 0
fi = 0
cosfi = 0
sinfi = 0
AMatrix = copy.deepcopy(Matrix)
while(1):
maxtemp = Max_Elem(AMatrix, dim)
max = maxtemp[0]
max_i = maxtemp[1]
max_j = maxtemp[2]
#условие выхода
if(abs(max)<=epsilon):
break
if((AMatrix[max_i][max_i] == AMatrix[max_j][max_j])):
fi = math.pi/4
else:
fi = math.atan(2.0*max/(AMatrix[max_i][max_i] - AMatrix[max_j][max_j]))/2.0
cosfi = math.cos(fi)
sinfi = math.sin(fi)
LTMatrix = Idnt_Mtrx(dim)
LTMatrix[max_i][max_i] = cosfi
LTMatrix[max_j][max_j] = cosfi
LTMatrix[max_i][max_j] = -sinfi
LTMatrix[max_j][max_i] = sinfi
RTMatrix = copy.deepcopy(LTMatrix)
RTMatrix = Tran_Mtrx(RTMatrix, dim)
TempMatrix = Mult_Mtrx(LTMatrix, AMatrix, dim)
AMatrix = Mult_Mtrx(TempMatrix, RTMatrix, dim)
Matrix = copy.deepcopy(AMatrix)
return Matrix
dim = 4
epsilon = 0.001
Matrix = Mtrx_Gnrt(dim)
for i in Matrix:
print i
Matrix = Jacobi(Matrix, dim, epsilon)
for i in Matrix:
print i
import copy
import math
#создать заготовку для матрицы
def nw_matr(dim):
return map(list,[[0]*dim]*dim) # так проще и сразу создается "нулевая" матрица
#заполнить матрицу
def Mtrx_Gnrt(dim):
count = 1
Matrix = nw_matr(dim)
for i in range(dim):
for j in range(i,dim): # здесь важное изменение получается совсем другая матрица
if i == j:
Matrix[i][j] = count + 3
continue
Matrix[i][j] = Matrix[j][i] = count
count += 1
return Matrix
#транспонировать матрицу
def Tran_Mtrx(Matrix, dim):
for i in range(dim):
for j in range(i):
Matrix[i][j],Matrix[j][i] = Matrix[j][i],Matrix[i][j] # упрощение кода, уход от лишних переменных
return Matrix
#умножить матрицу
def Mult_Mtrx(AMatrix, BMatrix, dim):
CMatrix = nw_matr(dim) # лишняя переменная temp = 0
for i in range(dim):
for j in range(dim):
temp = 0
for l in range(dim):
CMatrix[i][j] = temp = temp + AMatrix[i][l]*BMatrix[l][j]
return CMatrix
#создать еденичную матрицу
def Idnt_Mtrx(dim):
Matrix = nw_matr(dim)
for i in range(dim):
Matrix[i][i] = 1 # нулями наша матрица уже заполнена / далее по мелочи лишние скобки, пробелы и т.п.
return Matrix
#найти максимальный элемент
def Max_Elem(Matrix, dim):
max = 0
max_i = 0
max_j = 0
for i in range(dim):
for j in range(dim):
if i == j:
continue
if abs(Matrix[i][j]) > max:
max = Matrix[i][j]
max_i = i
max_j = j
return [max, max_i, max_j]
#Сам метод
def Jacobi(Matrix, dim, epsilon):
max = 0
max_i = 0
max_j = 0
fi = 0
cosfi = 0
sinfi = 0
AMatrix = copy.deepcopy(Matrix)
while(1):
maxtemp = Max_Elem(AMatrix, dim)
max = maxtemp[0]
max_i = maxtemp[1]
max_j = maxtemp[2]
#условие выхода
if abs(max) <= epsilon:
break
if AMatrix[max_i][max_i] == AMatrix[max_j][max_j]:
fi = math.pi/4
else:
fi = math.atan(2.0*max/(AMatrix[max_i][max_i] - AMatrix[max_j][max_j]))/2.0
cosfi = math.cos(fi)
sinfi = math.sin(fi)
LTMatrix = Idnt_Mtrx(dim)
LTMatrix[max_i][max_i] = cosfi
LTMatrix[max_j][max_j] = cosfi
LTMatrix[max_i][max_j] = -sinfi
LTMatrix[max_j][max_i] = sinfi
RTMatrix = copy.deepcopy(LTMatrix)
RTMatrix = Tran_Mtrx(RTMatrix, dim)
TempMatrix = Mult_Mtrx(LTMatrix, AMatrix, dim)
AMatrix = Mult_Mtrx(TempMatrix, RTMatrix, dim)
Matrix = copy.deepcopy(AMatrix)
return Matrix
dim = 4
epsilon = 0.001
Matrix = Mtrx_Gnrt(dim)
for i in Matrix:
print i
Matrix = Jacobi(Matrix, dim, epsilon)
for i in Matrix:
print i