Форум сайта python.su
У меня небольшой скрипт, Python дает ошибку, с которим ни как не разбираюсь.
import pyodbc cnxn = pyodbc.connect( 'DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;axScanRows=8;MaxBufferSize=2048;FIL={MS Access};DriverId=25;DefaultDir=C:\Users\Narek\Desktop;DBQ=C:\Users\Narek\Desktop\db2.mdb;Uid=myusername;Pwd=password;') cursor = cnxn.cursor() class Point: def __init__(self, x=0, y=0, z=0): self.x = x self.y = y self.z = z p = Point() SQLpx = ("select Xcor from Points where Xcor = 7") SQLpy = ("select Ycor from Points where Ycor = 7") SQLpz = ("select Zcor from Points where Xcor = 7 and Ycor = 7") for row in cursor.execute(SQLpx): p.x = row.Xcor for row in cursor.execute(SQLpy): p.y = row.Ycor for row in cursor.execute(SQLpz): p.z = row.Zcor p = Point(p.x,p.y,p.z) for i in range(0, 10): x1 = p.x - 1 y1 = p.y + 1 z1 = 0 p1 = Point() if (x1 <= 0 and x1 > 10 or y1 <= 0 and y1 > 10): print("Wrong arguments") else: SQLp1z = "SELECT Zcor FROM Points WHERE Xcor = {x1} AND Ycor = {y1}".format(x1=x1, y1=y1) for row in cursor.execute(SQLp1z): z1 = row.Zcor p1 = Point(x1, y1, z1) print (p1.x, p1.y, p1.z) x2 = p.x - 1 y2 = p.y - 1 z2 = 0 p2 = Point() if (x2 <= 0 and x2 > 10 or y2 <= 0 and y2 > 10): print("Wrong arguments") else: SQLp2z = "SELECT Zcor FROM Points WHERE Xcor = {x2} AND Ycor = {y2}".format(x2=x2, y2=y2) for row in cursor.execute(SQLp2z): z2 = row.Zcor p2 = Point(x2, y2, z2) print (p2.x, p2.y, p2.z) x3 = p.x - 1 y3 = p.y z3 = 0 p3 = Point() if (x3 <= 0 and x3 > 10 or y3 <= 0 and y3 > 10): print("Wrong arguments") else: SQLp2z = "SELECT Zcor FROM Points WHERE Xcor = {x3} AND Ycor = {y3}".format(x3=x3, y3=y3) for row in cursor.execute(SQLp2z): z3 = row.Zcor p3 = Point(x3, y3, z3) print (p3.x, p3.y, p3.z) x4 = p.x y4 = p.y - 1 z4 = 0 p4 = Point() if (x4 <= 0 and x4 > 10 or y4 <= 0 and y4 > 10): print("Wrong arguments") else: SQLp4z = "SELECT Zcor FROM Points WHERE Xcor = {x4} AND Ycor = {y4}".format(x4=x4, y4=y4) for row in cursor.execute(SQLp4z): z4 = row.Zcor p4 = Point(x4, y4, z4) print (p4.x, p4.y, p4.z) x5 = p.x y5 = p.y + 1 z5 = 0 p5 = Point() if (x5 <= 0 and x5 > 10 or y5 <= 0 and y5 > 10): print("Wrong arguments") else: SQLp5z = "SELECT Zcor FROM Points WHERE Xcor = {x5} AND Ycor = {y5}".format(x5=x5, y5=y5) for row in cursor.execute(SQLp5z): z5 = row.Zcor p5 = Point(x5, y5, z5) print (p5.x, p5.y, p5.z) x6 = p.x + 1 y6 = p.y - 1 z6 = 0 p6 = Point() if (x6 <= 0 and x6 > 10 or y6 <= 0 and y6 > 10): print("Wrong arguments") else: SQLp6z = "SELECT Zcor FROM Points WHERE Xcor = {x6} AND Ycor = {y6}".format(x6=x6, y6=y6) for row in cursor.execute(SQLp6z): z6 = row.Zcor p6 = Point(x6, y6, z6) print (p6.x, p6.y, p6.z) x7 = p.x - 1 y7 = p.y z7 = 0 p7 = Point() if (x7 <= 0 and x7 > 10 or y7 <= 0 and y7 > 10): print("Wrong arguments") else: SQLp7z = "SELECT Zcor FROM Points WHERE Xcor = {x7} AND Ycor = {y7}".format(x7=x7, y7=y7) for row in cursor.execute(SQLp7z): z7 = row.Zcor p7 = Point(x7, y7, z7) print (p7.x, p7.y, p7.z) x8 = p.x + 1 y8 = p.y + 1 z8 = 0 p8 = Point() if (x8 <= 0 and x8 > 10 or y8 <= 0 and y8 > 10): print("Wrong arguments") else: SQLp8z = "SELECT Zcor FROM Points WHERE Xcor = {x8} AND Ycor = {y8}".format(x8=x8, y8=y8) for row in cursor.execute(SQLp8z): z8 = row.Zcor p8 = Point(x8, y8, z8) print (p8.x, p8.y, p8.z) plist = [p1, p2, p3, p4, p5, p6, p7, p8] dif = [abs(p.z - p1.z), abs(p.z - p2.z), abs(p.z - p3.z), abs(p.z - p4.z), abs(p.z - p5.z), abs(p.z - p6.z), abs(p.z - p7.z), abs(p.z - p8.z)] print(dif) for i in xrange(len(dif)): a = min(dif) b = dif.index(a) print(a, b) pNew = plist[b] print (pNew.x, pNew.y, pNew.z) xn = pNew.x yn = pNew.y zn = pNew.z cursor.execute( "UPDATE Points SET SLValue = 1 WHERE Xcor = {xn} AND Ycor = {yn} AND Zcor = {zn}".format(xn=xn, yn=yn, zn=zn)) cnxn.commit() p = (pNew.x, pNew.y, pNew.z) i += 1
Отредактировано Narek (Март 20, 2017 10:20:29)
Офлайн
Сделайте перед этой строкой
print(p)
Офлайн
p = (pNew.x, pNew.y, pNew.z)
Онлайн
NarekВ p находится кортеж, а не число.
AttributeError: ‘tuple’ object has no attribute ‘x’
NarekКуча ошибок, дальше будет то же самое.
У меня небольшой скрипт
NarekОтдай эту задачу программисту. x3 не может быть меньше нуля и больше десяти одновременно.if (x3 <= 0 and x3 > 10 or y3 <= 0 and y3 > 10):
Отредактировано py.user.next (Март 20, 2017 11:15:21)
Офлайн