Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2011 20:31:38

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Помогите пожалуйста, уже нужно завтра сдать отчет, ничего не получается

Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это так, вывести координаты каждого просвета, а в текстовый файл вывести послойное строение куба. Прозрачность элементарных кубиков устанавливается случайным образом.



Офлайн

#2 Июль 8, 2011 05:38:39

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Вот получилось создать массив, а как дальше работать?

import random
n = 4
n ** 3
shape = [[[random.randint(0, 1) for _ in range(n)] for _ in range(n)] for _ in range(n)]
print(shape)



Офлайн

#3 Июль 8, 2011 05:44:16

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Как сделать, чтобы можно было посчитать в каждом из этих массивов 0? и если количество 0 в массиве равно n то просвет есть и мы записываем все в файл. Как это можно записать?



Офлайн

#4 Июль 8, 2011 06:30:46

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

def main():
shape = [[[random.randint(0, 1) for _ in range(n)] for _ in range(n)] for _ in range(n)]
print(shape)
with open('file.txt', 'w', encoding='ascii') as f:
print(shape, file=f)
with open('file.txt', 'r', encoding='ascii') as f:
rmatr = eval(f.read())
print(rmatr)

if __name__ == '__main__':
main()
а как можно сделать чтобы выводило по n элементов в каждой строке?После этого я думаю с помощью функции count посчитать количество 0 в каждой строке



Офлайн

#5 Июль 8, 2011 07:26:30

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Вот что вышло, нужно только вывести координаты просветов, незнаю как(

import random
n = 3
n ** 3
shape = [[[random.randint(0, 1) for _ in range(n)] for _ in range(n)] for _ in range(n)]
for i in range(n):
print(shape[i])
with open('file.txt', 'w', encoding='ascii') as f:
for i in range(n):
print(shape[i], file=f)
fn=open("file.txt")
a=fn.readline()
while a !="":
p=a.count('0')
if p==n:
print('Просвет есть: ', a)
else:
print('Просвета нет')
a=fn.readline()
fn.close()



Офлайн

#6 Июль 8, 2011 13:43:44

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Могу посоветовать использовать модуль numpy.
Пример кода:

import numpy, random

def check_line( vect, name ):
if max( vect ) == 1:
print "Not transparent:", name
else:
print "Transparent:", name


def main():
n = 3

# Создание плоского массива
flat = [ random.randint(0, 1) for x in range( n**3 ) ]

# Создание трехмерного массива
cube = numpy.array( flat ).reshape( n, n, n )

for x in range( n ):
for y in range( n ):
# Проверка строк в каждом измерении
check_line( cube[ x, y, ... ], "%d, %d, *" % ( x, y ) )
check_line( cube[ x, ..., y ], "%d, *, %d" % ( x, y ) )
check_line( cube[ ..., x, y ], "*, %d, %d" % ( x, y ) )

main()



Офлайн

#7 Июль 8, 2011 21:14:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

import numpy as np
n=8;k=3
kub=np.random.random((n,)*k)>0.1
result=max([np.any(kub.min(i)) for i in range(k)])
может и неправильно - я условия особо не читал. Но думаю идея понятна.



Отредактировано (Июль 8, 2011 21:14:27)

Офлайн

#8 Июль 9, 2011 00:57:03

AxL63AxL
От:
Зарегистрирован: 2011-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста (задача про куб)

Ребят спасибо)))Я сегодня не заходил на форум, поэтому не было возможности читать сообщения, но отчет я сдал, хоть было и не совсем правильно(((



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version