I have a multivariate polynomial f in x1,x2,x3,x4,x5,x6,x7 on a field k=GF2(a) and 2 lists z1=[1,a,0,x4,x5,0,0], z2=[1,a,0,a,a+1,x6,x7]. When I run f(z1), I have a polynomial, but with f(z2), I receive FractionFieldElement. So I can call f(z1).constant_coefficient(), but I could not do the same with f(z2).
 F2=GF(2); Rr.<x> = F2[]
k.<a> = F2.extension(x^2+x+1) # looks like bad syntax: the dot in "F." on the left side
v=3
o1=2
o2=2
n=v+o1+o2
R=PolynomialRing(k,["x%d" %i for i in range (1,n+1)])
x=R.gens()
Fc=[] # o1 polynomials in the first layer
for im in range(o1):  # what's o1? Sorry, when I pasted, some mistakes appeared but I didn't control them
     f=0
     for i in range (v): # what's v?
          for j in range (i,v+o1):
                f+=k.random_element()*x[i]*x[j]
     for i in range (n-o2):
           f+=k.random_element()*x[i]
      f+=k.random_element()
      Fc.append(f)
    for im in range(o1,o1+o2):
          f=0
          for i in range (v+o1):
               for j in range (i,n):
                    f+=k.random_element()*x[i]*x[j]
          for i in range (n):
               f+=k.random_element()*x[i]
          f+=k.random_element()
          Fc.append(f)
   w=vector([k.random_element() for i in range (o1+o2)])      o2 polynomials in the second layer
 for im in range(o1,o1+o2):
      f=0
      for i in range (v+o1):
            for j in range (i,n):
                 f+=k.random_element()x[i]x[j]
      for i in range (n):
           f+=k.random_element()*x[i]
      f+=k.random_element()
      Fc.append(f)
w=vector([k.random_element() for i in range (o1+o2)]) 
 
 Fn=[R.random_element() for i in range (o1)]
 while True:
    
 y_rd=[k.random_element() for j in range (v)]
    
 y=y_rd+[x[jj] for jj in range (v,v+o1)]+[0 for jjj in range (v+o1,n)]
    
 bc=[]
    
 Colist=[]
    
 for i in range (o1):
        
Fn[i]=Fci      Fn[i]=Fc[i](y)
             cc=w[i]-(Fn[i].constant_coefficient())
        
 bc.append(cc)
    
 mbc=vector(bc)
    
 for i in range (o1):
        
 Colist.append(Fn[i].coefficient(x[j]) for j in range (v,v+o1))
    
 Mtx=matrix(Colist)
     if rank(Mtx.augment(mbc))==rank(Mtx):
            
 break
 yb=Mtx.solve_right(mbc)
 ybb=list(yb)
 zz1=y_rd+ybb
 print(y)
 for i in range (o1+o2):
     
 print(Fc[i])
     
print(Fci)
     print(type(Fci))
    print(Fc[i](y))
         print(type(Fc[i](y)))
    print('-----------------------------------------')
 yy=zz1+[x[i] for i in range (v+o1,n)]
 print(yy)
 for i in range (o1+o2):
     
 print(Fc[i])
     
print(Fci)
     print(type(Fci))    print(Fc[i](yy))
         print(type(Fc[i](yy)))