Для цикла по диапазону (Python 2.7 + Ifc)

Я совсем новичок в программировании, и это один из моих первых вопросов на этом сайте. Я изучаю Pyhon уже более трех недель.

Для проекта я использую модуль под названием IfcOpenShell, который позволяет легко извлекать данные, указанные в файле ifc. Файл Ifc представляет собой экспресс-язык для описания данных здания.

Теперь я хочу получить все соответствующие данные о материалах, подходящие для анализа освещения, из файла ifc и преобразовать их в формат Radiance. Radiance — это программное обеспечение для анализа освещения с открытым исходным кодом.

Пока я написал этот скрипт:

import ifcopenshell

ifc_file = ifcopenshell.open('Example_A.ifc')

materials = ifc_file.by_type('IfcMaterial')

print 'There are ' + str(len(materials)) + ' different types of  materials in the file:' + '\n'

for x in range(0):
    materials = ifc_file.by_type('IfcMaterial')[x] 
    colour = ifc_file.by_type('IfcColourRgb')[x]
    styles = ifc_file.by_type('IfcStyledItem')[x]
    surfacestyles = ifc_file.by_type('IfcSurfaceStyleRendering')[x]

#DECLARING THE VARIABLES FOR RADIANCE DEFINTION
rad_material = materials.Name
rad_red = colour.Red
rad_green = colour.Green
rad_blue = colour.Blue
rad_specular = surfacestyles.SpecularColour
rad_roughness = 0.1 #<- Roughness is not defined in IFC, the value of 0.1 is  merely put there as an example


print 'RETRIEVES DATA FROM IFC FILE PRINTS THEM ACCORDING TO A RADIANCE READABLE DEFINITION'
print ''

print '#material name: ' + rad_material
print '#material type: ' + 'No definition found in the specified ifc file'
print 'void ' + ' plastic ' + rad_material
print '0'
print '0'
print rad_red , rad_green, rad_blue,rad_specular[0], rad_roughness

Я обнаружил, что в файле ifc указано ровно 100 различных материалов. И когда я запускаю этот код, он выводит:

There are 100 different types of  materials in the file:

RETRIEVES DATA FROM IFC FILE PRINTS THEM ACCORDING TO A RADIANCE READABLE DEFINITION

#material name: SH_resin Floor
#material type: No definition found in the specified ifc file
void  plastic SH_resin Floor
0
0
1.0 1.0 1.0 0.5 0.1

Однако это именно то, что я хотел сделать, когда меняю:

for x in range(0):

to

for x in range(0,100)

он выводит только последний материал диапазона:

There are 100 different types of  materials in the file:

RETRIEVES DATA FROM IFC FILE PRINTS THEM ACCORDING TO A RADIANCE READABLE DEFINITION

#material name: Juice
#material type: No definition found in the specified ifc file
void  plastic Juice
0
0
0.956862745098 0.956862745098 0.956862745098 0.5 0.1

Я не понимаю, где я делаю ошибку, или я использую правильные функции для того, что я хочу. Моей целью было вывести все 100 различных определений материалов.


person Claus    schedule 22.01.2015    source источник
comment
Вам нужен отступ операторов печати внутри файла for x in range(n).   -  person allcaps    schedule 23.01.2015
comment
Отступ правильный? Единственное, что происходит в вашем цикле for, это присваивание четырем переменным.   -  person Håken Lid    schedule 23.01.2015
comment
Хорошо спасибо большое. Я помещаю свои операторы печати в цикл for, и код работает отлично.   -  person Claus    schedule 23.01.2015


Ответы (1)


Отступ показывает, какие строки являются частью цикла for. Если вы хотите, чтобы операторы печати повторялись 100 раз, вы также должны сделать для них отступ.

import ifcopenshell

ifc_file = ifcopenshell.open('Example_A.ifc')

materials = ifc_file.by_type('IfcMaterial')

print 'There are ' + str(len(materials)) + ' different types of  materials in the file:' + '\n'

for x in range(0):
    materials = ifc_file.by_type('IfcMaterial')[x] 
    colour = ifc_file.by_type('IfcColourRgb')[x]
    styles = ifc_file.by_type('IfcStyledItem')[x]
    surfacestyles = ifc_file.by_type('IfcSurfaceStyleRendering')[x]

    #DECLARING THE VARIABLES FOR RADIANCE DEFINTION
    rad_material = materials.Name
    rad_red = colour.Red
    rad_green = colour.Green
    rad_blue = colour.Blue
    rad_specular = surfacestyles.SpecularColour
    rad_roughness = 0.1 #<- Roughness is not defined in IFC, the value of 0.1 is  merely put there as an example


    print 'RETRIEVES DATA FROM IFC FILE PRINTS THEM ACCORDING TO A RADIANCE READABLE DEFINITION'
    print ''

    print '#material name: ' + rad_material
    print '#material type: ' + 'No definition found in the specified ifc file'
    print 'void ' + ' plastic ' + rad_material
    print '0'
    print '0'
    print rad_red , rad_green, rad_blue,rad_specular[0], rad_roughness
person Håken Lid    schedule 22.01.2015