Найти - Пользователи
Полная версия: Как в Python быстро выводить в консоль
Начало » Центр помощи » Как в Python быстро выводить в консоль
1
wowlikon
Я недавно решил запилить 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')
PEHDOM
Вы же видео смотрели, в нем у афтора теже проблемы, правда при увеличении “разрешения”, но сути это не меняет.
Однозначного ответа вам не будет, потому что операция вывода в консоль - в принципе медленная и сильно зависит от процессора, и ОС. Плюс вы пишете на пайтон так как будто это Си, что есть очень даже плохо.пайтон не Си и писать на нем нужно как на пайтоне.
МОгу дть толлько пару общих советов:
- Вы делаете принт для каждого символа, сильно подозреваю, что если печатать хотябы построчно то будет быстрее, а еще лучше сразу весь экран выводить.
- Делать os.system('cls') туже глупо, это “лишнее движение”, просто перемещайте курсор в начало экрана и рисуйте “поверх”.
- map и zip могут сильно ускорить код.
Попрбуйте вместо принт sys.stdout.write или os.write возможно это тоже ускорит.
time.sleep(0.25) серьезно? возможно стоит это время не молотить в холостую, а посчитать следующу сцену?
обратите внимание на модули curses/UniCurses, colorama.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB