Exemplo n.º 1
0
def read_space_objects_data_from_file(input_filename):
    """Cчитывает данные о космических объектах из файла, создаёт сами объекты
    и вызывает создание их графических образов

    Параметры:

    **input_filename** — имя входного файла
    """

    objects = []
    with open(input_filename) as input_file:
        for line in input_file:
            if len(line.strip()) == 0 or line[0] == '#':
                continue  # пустые строки и строки-комментарии пропускаем
            object_type = line.split()[0].lower()
            if object_type == "star":  # FIXME: do the same for planet
                star = Star()
                star.type = "star"
                parse_star_parameters(line, star)
                objects.append(star)
            elif object_type == "planet":  # FIXME: do the same for planet
                planet = Planet()
                planet.type = "planet"
                parse_planet_parameters(line, planet)
                objects.append(planet)
            else:
                print("Unknown space object")

    return objects
Exemplo n.º 2
0
def parse_planet_parameters(line):
    """Считывает данные о планете из строки.
    Предполагается такая строка:
    Входная строка должна иметь слеюущий формат:
    Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты планеты, (Vx, Vy) — скорость.
    Пример строки:
    Planet 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание планеты.
    **planet** — объект планеты.
    """
    planet = Planet()

    line_elems = line.split(' ')
    planet.size = float(line_elems[1])
    planet.color = str(line_elems[2])
    planet.m = float(line_elems[3])
    planet.x = float(line_elems[4])
    planet.y = float(line_elems[5])
    planet.Vx = float(line_elems[6])
    planet.Vy = float(line_elems[7])

    return planet
    pass  # FIXME: not done yet...
Exemplo n.º 3
0
def parse_planet_parameters(line, planet):
    """Считывает данные о планете из строки.
    Предполагается такая строка:
    Входная строка должна иметь слеюущий формат:
    Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты планеты, (Vx, Vy) — скорость.
    Пример строки:
    Planet 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание планеты.
    **planet** — объект планеты.
    """
    l = line.split()
    planet = Planet()
    planet.R = line(1)
    planet.color = line(2)
    planet.m = line(3)
    planet.x = line(4)
    planet.y = line(5)
    planet.Vx = line(6)
    planet.Vy = line(7)
    return planet
def read_space_objects_data_from_file(input_filename):
    """
    Cчитывает данные о космических объектах из файла, создаёт сами объекты
    и вызывает создание их графических образов

    Параметры:

    **input_filename** — имя входного файла
    """

    objects = []
    with open(input_filename, 'r') as input_file:
        for line in input_file:
            if len(line.strip()) == 0 or line[0] == '#':
                continue

            object_type = line.split()[0].lower()
            if object_type == "star":
                star = Star()
                parse_star_parameters(line, star)
                objects.append(star)
            elif object_type == "planet":
                planet = Planet()
                parse_planet_parameters(line, planet)
                objects.append(planet)
            else:
                print("Unknown space object")

    return [DrawableObject(obj) for obj in objects]
Exemplo n.º 5
0
def read_space_objects_data_from_file(input_filename):
    """Cчитывает данные о космических объектах из файла, создаёт сами объекты
    и вызывает создание их графических образов

    Параметры:

    **input_filename** — имя входного файла
    """

    objects = []
    print('ready to open file...')
    with open(input_filename, encoding='utf8') as input_file:
        for line in input_file:
            if len(line.strip()) == 0 or line[0] == '#':
                continue  # пустые строки и строки-комментарии пропускаем
            object_type = line.split()[0].lower()
            if object_type == "star":
                star = Star()
                parse_star_parameters(line, star)
                objects.append(star)
            elif object_type == 'planet':
                pl = Planet()
                parse_star_parameters(line, pl)
                objects.append(pl)
            else:
                print("Unknown space object")

    return objects
Exemplo n.º 6
0
def read_space_objects_data_from_file(input_filename):
    """Cчитывает данные о космических объектах из файла, создаёт сами объекты
    и вызывает создание их графических образов

    Параметры:

    **input_filename** — имя входного файла
    """

    objects = []
    with open(input_filename) as input_file:
        for line in input_file:
            if len(line.strip()) == 0 or line[0] == '#':
                continue  # пустые строки и строки-комментарии пропускаем
            object_type = line.split()[0].lower()
            if object_type == "star":
                star = Star()
                parse_star_parameters(line, star)
                objects.append(star)
            if object_type == "planet":
                planet = Planet()
                parse_planet_parameters(line, planet)
                objects.append(planet)
            if object_type == "dt":
                time_step = float(line.split()[1].lower())
            else:
                pass

    return objects, time_step
Exemplo n.º 7
0
def parse_parameters(line, space_object):
    """Считывает данные о космическом объекте из строки.
    Входная строка должна иметь слеюущий формат:
    Type <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты объекта, (Vx, Vy) — скорость.
    Type это тип объекта -- Star или Planet.
    Пример строки:
    Star 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание звезды.
    **star** — объект звезды.
    """
    try:
        obj_type, r, color, m, x, y, Vx, Vy = line.split()
    except:
        raise TypeError("Non-valid line")
    obj_type = obj_type.lower()
    m = float(m)
    x = float(x)
    y = float(y)
    r = float(r)
    Vx = float(Vx)
    Vy = float(Vy)
    if obj_type == 'star':
        return Star(m, x, y, r, Vx, Vy, color)
    if obj_type == 'planet':
        return Planet(m, x, y, r, Vx, Vy, color)
def parse_object_parameters(line: str):
    """
    Reads space object parameters from string line
    Входная строка должна иметь слеюущий формат:
    Star/Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты зведы, (Vx, Vy) — скорость.
    Пример строки:
    Star 10 red 1000 1 2 3 4

    @param line: a string that describes object
    @raise ValueError: raised is line format is incorrect
    """
    pattern = r'(Star|Planet)\s+([0-9.,eE\-+]+)\s+(\w+)\s+([0-9.,eE\-+]+)\s+([0-9.,eE\-+]+)\s+([0-9.,eE\-+]+)\s+([0-9.,' \
              r'eE\-+]+)\s+([0-9.,eE\-+]+)\s+\n?'

    match = re.match(pattern, line)
    if match is None:
        raise ValueError('Line format is not correct')

    obj = None

    obj_type = match.group(1)
    if obj_type == 'Star':
        obj = Star()
    elif obj_type == 'Planet':
        obj = Planet()
    else:  # must never occur, but still
        raise ValueError('Line format is not correct')

    radius = float(match.group(2))
    if radius < 0:
        raise ValueError('Line format is not correct')
    else:
        obj.R = radius

    color = match.group(3)
    obj.color = color

    mass = float(match.group(4))
    if mass < 0:
        raise ValueError('Line format is not correct')
    else:
        obj.m = mass

    x = float(match.group(5))
    obj.x = float(x)

    y = float(match.group(6))
    obj.y = float(y)

    vx = float(match.group(7))
    obj.Vx = float(vx)

    vy = float(match.group(8))
    obj.Vy = float(vy)

    return obj
Exemplo n.º 9
0
def destruction(body, space_objects):
    body.Vx *= 0.8
    body.Vy *= 0.8
    body.R *= 0.5
    body.m *= 0.5
    turn(body, 1)

    newbody = Planet()
    newbody.R = body.R
    newbody.m = body.m
    newbody.x = body.x
    newbody.y = body.y
    newbody.Vx = body.Vx
    newbody.Vy = body.Vy
    newbody.color = body.color

    turn(newbody, -2)

    space_objects.append(newbody)
Exemplo n.º 10
0
def parse_planet_parameters(line):
    """Считывает данные о планете из строки.
    Предполагается такая строка:
    Входная строка должна иметь слеюущий формат:
    Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты планеты, (Vx, Vy) — скорость.
    Пример строки:
    Planet 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание планеты.
    **planet** — объект планеты.
    """
    planet = Planet()
    s = line
    a = s.find(' ')  #индекс первого пробела
    s = s[a + 1:]
    a = s.find(' ')
    planet.r = float(s[:a])  #радиус планеты
    s = s[a + 1:]
    a = s.find(' ')
    planet.color = s[:a]
    s = s[a + 1:]
    a = s.find(' ')
    planet.m = float(s[:a])  #масса планеты
    s = s[a + 1:]
    a = s.find(' ')
    planet.x = float(s[:a])
    s = s[a + 1:]
    a = s.find(' ')
    planet.y = float(s[:a])
    s = s[a + 1:]
    a = s.find(' ')
    planet.vx = float(s[:a])
    s = s[a + 1:]
    a = s.find(' ')
    planet.vy = float(s[:a])
    #pass  # FIXME: not done yet...
    return planet
Exemplo n.º 11
0
def parse_planet_parameters(line):
    """Считывает данные о планете из строки.
    Предполагается такая строка:
    Входная строка должна иметь слеюущий формат:
    Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты планеты, (Vx, Vy) — скорость.
    Пример строки:
    Planet 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание планеты.
    **planet** — объект планеты.
    """
    line = line.split()
    line[0] = line[0].lower()
    return Planet(line[0], line[1], line[2], line[3], line[4], line[5],
                  line[6], line[7])
Exemplo n.º 12
0
def write_space_objects_data_to_file(output_filename, space_objects):
    """Сохраняет данные о космических объектах в файл.
    Строки должны иметь следующий формат:
    Star <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>
    Planet <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Параметры:

    **output_filename** — имя входного файла
    **space_objects** — список объектов планет и звёзд
    """
    with open(output_filename, 'w') as out_file:
        type_name = ''
        for obj in space_objects:
            if type(obj) == Star():
                type_name = 'star'
            elif type(obj) == Planet():
                type_name = 'planet'
            print(
                out_file, "%s %f %s %f %f %f %f %f" %
                (type_name, obj.R, obj.color, obj.m, obj.x, obj.y, obj.Vx,
                 obj.Vy))
Exemplo n.º 13
0
def parse_parameters(line):
    """Считывает данные о небесном теле из строки.
    Входная строка должна иметь слеюущий формат:
    Star <радиус в пикселах> <цвет> <масса> <x> <y> <Vx> <Vy>

    Здесь (x, y) — координаты, (Vx, Vy) — скорость.
    Пример строки:
    Star 10 red 1000 1 2 3 4

    Параметры:

    **line** — строка с описание небесного тела.
    **star** — объект.
    """
    object_type = line.split()[0].lower()
    if object_type == "star":
        star = Star()
        star.type = line.split()[0]
        star.R = float(line.split()[1])
        star.color = line.split()[2]
        star.m = float(line.split()[3])
        star.x = float(line.split()[4])
        star.y = float(line.split()[5])
        star.Vx = float(line.split()[6])
        star.Vy = float(line.split()[7])
        return star
    elif object_type == "planet":
        planet = Planet()
        planet.type = line.split()[0]
        planet.R = float(line.split()[1])
        planet.color = line.split()[2]
        planet.m = float(line.split()[3])
        planet.x = float(line.split()[4])
        planet.y = float(line.split()[5])
        planet.Vx = float(line.split()[6])
        planet.Vy = float(line.split()[7])
        planet.name = line.split()[10]

        return planet
    else:
        print("Unknown space object")