Форум сайта python.su
Помогите пожалуйста, уже нужно завтра сдать отчет, ничего не получается
Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это так, вывести координаты каждого просвета, а в текстовый файл вывести послойное строение куба. Прозрачность элементарных кубиков устанавливается случайным образом.
Офлайн
Вот получилось создать массив, а как дальше работать?
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)
Офлайн
Как сделать, чтобы можно было посчитать в каждом из этих массивов 0? и если количество 0 в массиве равно n то просвет есть и мы записываем все в файл. Как это можно записать?
Офлайн
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()
Офлайн
Вот что вышло, нужно только вывести координаты просветов, незнаю как(
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()
Офлайн
Могу посоветовать использовать модуль 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()
Офлайн
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)
Офлайн
Ребят спасибо)))Я сегодня не заходил на форум, поэтому не было возможности читать сообщения, но отчет я сдал, хоть было и не совсем правильно(((
Офлайн