Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2021 19:33:45

wowlikon
Зарегистрирован: 2021-11-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в Python быстро выводить в консоль

Я недавно решил запилить 3D графику в консоли как в видео Видео но в консоль не успевают выводиться символы.
Код:

 import math, random, os, time
width = 80
height = 20
k = (width/height) * (11/24)
screen = ['.']*(height*width+width)
def render(arr, width, height, k, t):
    for y in range(height):
        vy = (y/height)*2-1
        for x in range(width):
            vx = (x/width)*2-1
            vx *= k
            if math.sqrt(vx*vx + vy*vy) <= abs(math.cos(t))*0.75:
                arr[x+x*y] = '@'
            else:
                arr[x+x*y] = ' '
            if x != width:
                print(arr[x+x*y], end='')
            else:
                print(arr[x+x*y])
    return arr
t = 0.0
run = True
while run:
    screen = render(screen, width, height, k, t)
    t += 0.15
    time.sleep(0.25)
    os.system('cls')

Отредактировано wowlikon (Ноя. 30, 2021 19:35:33)

Офлайн

#2 Ноя. 30, 2021 21:14:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как в Python быстро выводить в консоль

Вы же видео смотрели, в нем у афтора теже проблемы, правда при увеличении “разрешения”, но сути это не меняет.
Однозначного ответа вам не будет, потому что операция вывода в консоль - в принципе медленная и сильно зависит от процессора, и ОС. Плюс вы пишете на пайтон так как будто это Си, что есть очень даже плохо.пайтон не Си и писать на нем нужно как на пайтоне.
МОгу дть толлько пару общих советов:
- Вы делаете принт для каждого символа, сильно подозреваю, что если печатать хотябы построчно то будет быстрее, а еще лучше сразу весь экран выводить.
- Делать os.system('cls') туже глупо, это “лишнее движение”, просто перемещайте курсор в начало экрана и рисуйте “поверх”.
- map и zip могут сильно ускорить код.
Попрбуйте вместо принт sys.stdout.write или os.write возможно это тоже ускорит.
time.sleep(0.25) серьезно? возможно стоит это время не молотить в холостую, а посчитать следующу сцену?
обратите внимание на модули curses/UniCurses, colorama.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Ноя. 30, 2021 21:14:39)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version