Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 22
1

Матрицы (листы в листах) help

22.10.2011, 17:24. Показов 2584. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!

Мне надо создать квадратную матрицу которая показывает 'x' на её диагоналях.
Она представляет из себя аеропорт где '0' это свабодные места а 'x' это преграды.

Bот что у меня получилось:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
P=5
 
 
def aeroport(P): 
    list = [] 
    for i in range (P): 
        list.append([0]*P)
        for j in range (P): 
            if j == i or j == P-1-i : 
                list[i][j]=-1
    return list
 
a= aeroport(P) #здесь а=[[-1, 0, 0, 0, -1], [0, -1, 0, -1, 0], [0, 0, -1, 0, 0], [0, -1, 0, -1, 0], [-1, 0, 0, 0, -1]]
 
def matrix(a):
    res= ""
    for i in range(len(a)): 
        for j in range(len(a[0])): 
            print a[i][j],
        print
    return res
 
 
print matrix(a)
Этот код показывает
-1 0 0 0 -1
0 -1 0 -1 0
0 0 -1 0 0
0 -1 0 -1 0
-1 0 0 0 -1

Как мне сделать так чтоб ни трогая функцию aeroport(P), матрица показывала 'x' вместо '-1' на диагоналях? Help please
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2011, 17:24
Ответы с готовыми решениями:

Поиск данных в листах и копирование их в отдельные листы
Есть файл который обновляется каждый день. В нём есть колонка U. Нужен макрос, который бы искал по...

По содержимому столбца создать листы и в эти листы скопировать соответствующие строки
Здравствуйте, уважаемые Форумчане!!! Есть задачка: В прикреплённом файле есть табличка. Надо по...

Листы: как связать все листы
Подскажите, пожалуйста, как связать все листы в VBA?

НА ЭКСЕЛЕ БАЗА ДАННЫХ .Создать листы "сотрудники" кафедры","дисциплины". и с помощью ВПР и СУММЕСЛИ связать эти листы
Предметная область: Учебно-методическое управление (профессорско-преподавательский состав)....

8
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.10.2011, 17:48 2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> def airport(n, obst='x', free='0'):
...     return [[obst if i == j or n - i - 1 == j else free for i in xrange(n)] \
...             for j in xrange(n)]
... 
>>> x, y = airport(5), airport(5, '-1', '*')
>>> def print_matrix(matrix):
...     for row in matrix:
...             for cell in row:
...                     print cell,
...             print
... 
>>> print_matrix(x)
x 0 0 0 x
0 x 0 x 0
0 0 x 0 0
0 x 0 x 0
x 0 0 0 x
>>> print_matrix(y)
# _ _ _ #
_ # _ # _
_ _ # _ _
_ # _ # _
# _ _ _ #
>>>
А в твоем коде нужно было всего лишь в десятой строчке заменить -1 на нужный тебе символ
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 22
22.10.2011, 18:31  [ТС] 3
Класс спасибо за такой быстрый ответ! твой код круче

У меня ещё один вопрос например у нас есть list=[1,2,3,4] который подрозумивает 4 вертолётика, как их можно посадить на матрицу аэропорт чтоб получилось вот так

x 1 2 3 x
4 x 0 x 0
0 x 0 x 0
x 0 0 0 x

и каждый раз когда пользователь жмёт скажем 'z' мы отнемали единицу от этих чисел:

x 0 1 2 x
3 x 0 x 0
0 x 0 x 0
x 0 0 0 x

Я недавно начел изучать python и пока ни очень хорошо понимаю О_о

заранее спасибо
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.10.2011, 19:03 4
Armany-92, пробегаешь по всем полям аэропорта, если 0 - то свободное поле, значит, размещаешь там свой вертолет. И т.д.
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 22
22.10.2011, 21:17  [ТС] 5
Цитата Сообщение от Nameless One Посмотреть сообщение
Armany-92, пробегаешь по всем полям аэропорта, если 0 - то свободное поле, значит, размещаешь там свой вертолет. И т.д.
Для этого я должен создать новую функцию ?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
23.10.2011, 07:14 6
Armany-92, ага, лучше отдельную функцию. А вообще можно создать класс airport с методами __init__ (создание и заполнение матрицы), display (вывод на экран), add_helicopters (посадить вертолеты) и т.д.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
23.10.2011, 10:30 7
Цитата Сообщение от Nameless One Посмотреть сообщение
А вообще можно создать класс airport
примерно так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from itertools import product
 
class AirportFullError(Exception): pass
 
class Airport:
    def __init__(self, size, obstacle_char='x', unoccupied_char='_', cell_width=4):
        self.size = size
        self.oc = obstacle_char
        self.uc = unoccupied_char
        self.cw = cell_width
 
        self.field = [[-1 if i == j or self.size - i - 1 == j else 0 \
                           for j in xrange(self.size)] \
                           for i in xrange(self.size)]
 
    def __str__(self):
        def cell2str(cell):
            if cell == -1:
                return self.oc
 
            if cell == 0:
                return self.uc
 
            return str(cell)
 
        return '\n'.join([''.join(["%-*s" % (self.cw, cell2str(cell)) for cell in row]) \
                             for row in self.field])
 
    def putHelicopters(self, hs):
        it = iter(hs)
        can_place = lambda cell: cell == 0
 
        try:
            for i, j in product(xrange(self.size), xrange(self.size)):
                if can_place(self.field[i][j]):
                    h = next(it)
                    self.field[i][j] = h
            next(it)
            raise AirportFullError
        except StopIteration:
            pass
 
    def removeHelicopters(self):
        for i, j in product(xrange(self.size), xrange(self.size)):
            if self.field[i][j] > 0:
                self.field[i][j] -= 1
1
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 22
23.10.2011, 14:20  [ТС] 8
Wow не так быстро... мы этого в институте ещё ни проходили О_о

вот что я имею:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- coding: utf-8 -*- 
 
P=int(raw_input("Veuillez donner le côté de la carte: "))
T=int(raw_input("Veuillez donner la durée qu'un hélicoptère reste sur une piste après un atterrissage(valeure comprise entre 1 et 9): "))
commande=str(raw_input("Tapez 'q' pour arrêter la simulation, autre chose pour la lancer: "))
 
import random
n = random.randint(1,2*P) 
c = random.randint(2,9) 
 
en_attente=[] # лист каторый имет 'n' вертолётов
 
 
def aeroport(n, obst='x', libre='0'):
    return [[obst if i == j or n - i - 1 == j else libre for i in range(n)] \
        for j in range(n)]
 
 
x = aeroport(P)
y = aeroport(P, '-1', '0') 
def print_matrix(matrix):
    print "Aéroport:"
    for row in matrix:
        for cell in row:
            print cell,
        print
print "Arrivée de",n,"nouveau(x) hélicoptère(s) avec",c,"unité(s) de carburant."
print_matrix(x)
 
 
    
def putHelicopters(aeroport,en_attente,i,j): # не уверен что ето правильная функция
    en_attente=[n]
    taille=len(aeroport)
    res=None
    if ((0 <= i <taille)and(0 <= j <taille)):
        if (aeroport[i][j] == 0):
            aeroport[i][j]= [n]
            res = aeroport
    return res
 
 
 
while 1:
    commande=str(raw_input("Tapez 'q' pour arrêter, autre chose pour poursuivre: "))
    if commande != 'q':
        print "Arrivée de",random.randint(1,2*P),"nouveau(x) hélicoptère(s) avec",random.randint(2,9),"unité(s) de carburant."
 
 
            # вот тут я застрял Мне надо добавлять 'n' новых вертолетов
            # которые находятся на посадке 'T' времени, время должно уменьшится
            # каждый раз когда мы эаходим в while
 
 
        print_matrix(x)
 
    if commande == 'q': break

Да вы правельно догодались это на французком

Скрин запуска проги http://imageshack.us/photo/my-... ejekt.jpg/
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 22
24.10.2011, 21:50  [ТС] 9
***Closed***
0
24.10.2011, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2011, 21:50
Помогаю со студенческими работами здесь

1 кнопкой на двух листах
Собственно вычисляются значения в таблицах но на 1 листе, как сделать чтобы кнопками с 1 листа...

Взаимосвязанные таблицы на 2-5 листах
Основной лист: конкретный трактор с уникальным номером;Менеджер по продажам;Продано(ДА\НЕТ) ...

Поиск в связанных листах
Всем привет! Подскажите пожалуйста. У меня проблема в функции search(( Хочу сделать так чтобы можно...

Код на нескольких листах.
Однажды увидел что в паскале можно написать USES list1; и код из файла list1.pas тоже будет...

Макросы в защищенных листах
Всем добрый вечер. У меня такая проблема. Я прописал макрос для листа. Когда хочу защитить лист...

Печать на нескольких листах
Здравствуйте. Помогите, пожалуйста, с печатью чертежей из Autocad2014. Нужно напечатать на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru