It's not totally clear to me what you're trying to do but to get the maximum z-coordinate of a surface you can use the surface.coords attribute to do:
 surfaces = idf.idfobjects['BUILDINGSURFACE:DETAILED']
for s in surfaces:
    max_z = max(pt[2] for pt in s.coords)
    print "%s: %.2f" % (s.Name, max_z)
 If you want to to substitute the value in the maximum z-coordinates of walls and roof/ceiling to change the ceiling height:
 surfaces = idf.idfobjects['BUILDINGSURFACE:DETAILED']
walls_and_roofs = [s for s in surfaces if s.Surface_Type in ['Wall', 'Roof']]
for s in surfaces:
    max_z = max(pt[2] for pt in s.coords)
    for field in s.fieldnames:  # or "for field in s.objls:" if using version <= 0.5.2
        if 'ZCOORDINATE' in field.upper() and s[field] == max_z:
            s[field] = '@@ceiling_height@@'
    print s
 Will output:
 BuildingSurface:Detailed, 
    MyRoof,                   !- Name
    Roof,                     !- Surface Type
    Exterior Roof,            !- Construction Name
    Zone1,                   !- Zone Name
    Outdoors,                 !- Outside Boundary Condition
    ,                         !- Outside Boundary Condition Object
    SunExposed,               !- Sun Exposure
    WindExposed,              !- Wind Exposure
    ,                         !- View Factor to Ground
    4,                        !- Number of Vertices
    2.23,                     !- Vertex 1 Xcoordinate
    2.52,            !- Vertex 1 Ycoordinate
    @@ceiling_height@@,                     !- Vertex 1 Zcoordinate
    2.23,                     !- Vertex 2 Xcoordinate
    1.02,            !- Vertex 2 Ycoordinate
    @@ceiling_height@@,                     !- Vertex 2 Zcoordinate
    3.22,                     !- Vertex 3 Xcoordinate
    1.02,            !- Vertex 3 Ycoordinate
    @@ceiling_height@@,                     !- Vertex 3 Zcoordinate
    3.22,                     !- Vertex 4 Xcoordinate
    2.52,            !- Vertex 4 Ycoordinate
    @@ceiling_height@@;                     !- Vertex 4 Zcoordinate
BuildingSurface:Detailed, 
    MyWall,                   !- Name
    Wall,                     !- Surface Type
    Exterior Wall,            !- Construction Name
    Zone1,                   !- Zone Name
    Outdoors,                 !- Outside Boundary Condition
    ,                         !- Outside Boundary Condition Object
    SunExposed,               !- Sun Exposure
    WindExposed,              !- Wind Exposure
    ,                         !- View Factor to Ground
    4,                        !- Number of Vertices
    2.23,                     !- Vertex 1 Xcoordinate
    2.52,            !- Vertex 1 Ycoordinate
    @@ceiling_height@@,                     !- Vertex 1 Zcoordinate
    2.23,                     !- Vertex 2 Xcoordinate
    2.52,            !- Vertex 2 Ycoordinate
    0.0,                      !- Vertex 2 Zcoordinate
    2.23,                     !- Vertex 3 Xcoordinate
    2.56,                     !- Vertex 3 Ycoordinate
    0.0,                      !- Vertex 3 Zcoordinate
    2.23,                     !- Vertex 4 Xcoordinate
    2.56,                     !- Vertex 4 Ycoordinate
    @@ceiling_height@@;                     !- Vertex 4 Zcoordinate
   
You are trying to get the fieldnames of a sequence. You want to get the fieldnames of an object. The snippet of code you've posted doesn't explain why you are looping over surf_names or what is in surf_names. You need to loop over each of the objects in the geometry sequence and test each of those for a match.
Apologies, I had only copied part of the code. See if my edit makes sense now