Форум сайта python.su
Недавно стал учить Python. Написал программу, которая выводит на экран часы с использованием символов, например “*”. Но предполагаю, что объем кода получился слишком увесистый. Возможно ли минимизировать код, придя к тому же итогу, который получился?
import unicurses as curses import keyboard import locale import time import sys locale.setlocale(locale.LC_ALL,('russian')) stdscr=curses.initscr() c='' def number(x,y,num): '''x,y: координаты вывода цифра на экран; num: цифра 0-9''' if num==0: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,'* *') curses.mvaddstr(y+2,x,'* *') curses.mvaddstr(y+3,x,'* *') curses.mvaddstr(y+4,x,'* *') curses.mvaddstr(y+5,x,'* *') curses.mvaddstr(y+6,x,'* *') curses.mvaddstr(y+7,x,'* *') curses.mvaddstr(y+8,x,'* *') curses.mvaddstr(y+9,x,'* *') curses.mvaddstr(y+10,x,'**********') elif num==1: curses.mvaddstr(y,x,' *') curses.mvaddstr(y+1,x,' * *') curses.mvaddstr(y+2,x,' * *') curses.mvaddstr(y+3,x,' * *') curses.mvaddstr(y+4,x,' * *') curses.mvaddstr(y+5,x,' *') curses.mvaddstr(y+6,x,' *') curses.mvaddstr(y+7,x,' *') curses.mvaddstr(y+8,x,' *') curses.mvaddstr(y+9,x,' *') curses.mvaddstr(y+10,x,' *') elif num==2: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,' *') curses.mvaddstr(y+2,x,' *') curses.mvaddstr(y+3,x,' *') curses.mvaddstr(y+4,x,' *') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,'*') curses.mvaddstr(y+7,x,'*') curses.mvaddstr(y+8,x,'*') curses.mvaddstr(y+9,x,'*') curses.mvaddstr(y+10,x,'**********') elif num==3: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,' *') curses.mvaddstr(y+2,x,' *') curses.mvaddstr(y+3,x,' *') curses.mvaddstr(y+4,x,' *') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,' *') curses.mvaddstr(y+7,x,' *') curses.mvaddstr(y+8,x,' *') curses.mvaddstr(y+9,x,' *') curses.mvaddstr(y+10,x,'**********') elif num==4: curses.mvaddstr(y,x,'* *') curses.mvaddstr(y+1,x,'* *') curses.mvaddstr(y+2,x,'* *') curses.mvaddstr(y+3,x,'* *') curses.mvaddstr(y+4,x,'* *') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,' *') curses.mvaddstr(y+7,x,' *') curses.mvaddstr(y+8,x,' *') curses.mvaddstr(y+9,x,' *') curses.mvaddstr(y+10,x,' *') elif num==5: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,'*') curses.mvaddstr(y+2,x,'*') curses.mvaddstr(y+3,x,'*') curses.mvaddstr(y+4,x,'*') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,' *') curses.mvaddstr(y+7,x,' *') curses.mvaddstr(y+8,x,' *') curses.mvaddstr(y+9,x,' *') curses.mvaddstr(y+10,x,'**********') elif num==6: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,'*') curses.mvaddstr(y+2,x,'*') curses.mvaddstr(y+3,x,'*') curses.mvaddstr(y+4,x,'*') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,'* *') curses.mvaddstr(y+7,x,'* *') curses.mvaddstr(y+8,x,'* *') curses.mvaddstr(y+9,x,'* *') curses.mvaddstr(y+10,x,'**********') elif num==7: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,' *') curses.mvaddstr(y+2,x,' *') curses.mvaddstr(y+3,x,' *') curses.mvaddstr(y+4,x,' *') curses.mvaddstr(y+5,x,'*') curses.mvaddstr(y+6,x,'*') curses.mvaddstr(y+7,x,'*') curses.mvaddstr(y+8,x,'*') curses.mvaddstr(y+9,x,'*') curses.mvaddstr(y+10,x,'*') elif num==8: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,'* *') curses.mvaddstr(y+2,x,'* *') curses.mvaddstr(y+3,x,'* *') curses.mvaddstr(y+4,x,'* *') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,'* *') curses.mvaddstr(y+7,x,'* *') curses.mvaddstr(y+8,x,'* *') curses.mvaddstr(y+9,x,'* *') curses.mvaddstr(y+10,x,'**********') elif num==9: curses.mvaddstr(y,x,'**********') curses.mvaddstr(y+1,x,'* *') curses.mvaddstr(y+2,x,'* *') curses.mvaddstr(y+3,x,'* *') curses.mvaddstr(y+4,x,'* *') curses.mvaddstr(y+5,x,'**********') curses.mvaddstr(y+6,x,' *') curses.mvaddstr(y+7,x,' *') curses.mvaddstr(y+8,x,' *') curses.mvaddstr(y+9,x,' *') curses.mvaddstr(y+10,x,'**********') else: curses.mvaddstr(y,x,'Неверный формат аргумента "num"') while True: curses.clear() h=time.strftime('%H') m=time.strftime('%M') s=time.strftime('%S') sec0=''.join(s[1]) sec1=''.join(s[0]) min0=''.join(m[1]) min1=''.join(m[0]) hour0=''.join(h[1]) hour1=''.join(h[0]) number(68,0,int(sec0)) number(56,0,int(sec1)) curses.mvaddstr(3,53,'*') curses.mvaddstr(7,53,'*') number(40,0,int(min0)) number(28,0,int(min1)) curses.mvaddstr(3,25,'*') curses.mvaddstr(7,25,'*') number(12,0,int(hour0)) number(0,0,int(hour1)) curses.mvaddstr(12,0,'Для выхода нажмите клавишу "q"') curses.refresh() if keyboard.is_pressed('q'): sys.exit() curses.endwin()
Офлайн
s_t_r_a_j
Возможно ли минимизировать код
#!/usr/bin/env python3 import unicurses as curses import keyboard import locale import time import sys numbers = { 0: ('**********', '* *', '* *', '* *', '* *', '* *', '* *', '* *', '* *', '* *', '**********'), 1: (' *', ' * *', ' * *', ' * *', ' * *', ' *', ' *', ' *', ' *', ' *', ' *'), 2: ('**********', ' *', ' *', ' *', ' *', '**********', '*', '*', '*', '*', '**********'), 3: ('**********', ' *', ' *', ' *', ' *', '**********', ' *', ' *', ' *', ' *', '**********'), 4: ('* *', '* *', '* *', '* *', '* *', '**********', ' *', ' *', ' *', ' *', ' *'), 5: ('**********', '*', '*', '*', '*', '**********', ' *', ' *', ' *', ' *', '**********'), 6: ('**********', '*', '*', '*', '*', '**********', '* *', '* *', '* *', '* *', '**********'), 7: ('**********', ' *', ' *', ' *', ' *', '*', '*', '*', '*', '*', '*'), 8: ('**********', '* *', '* *', '* *', '* *', '**********', '* *', '* *', '* *', '* *', '**********'), 9: ('**********', '* *', '* *', '* *', '* *', '**********', ' *', ' *', ' *', ' *', '**********') } def number(x,y,num): '''x,y: координаты вывода цифра на экран; num: цифра 0-9''' if num in numbers: for i in range(11): curses.mvaddstr(y+i,x,numbers[num][i]) else: curses.mvaddstr(y,x,'Неверный формат аргумента "num"') def colon(x,y): '''x,y: координаты вывода двоеточие на экран''' curses.mvaddstr(x,y,'*') curses.mvaddstr(x+4,y,'*') def main(): locale.setlocale(locale.LC_ALL,('russian')) stdscr=curses.initscr() while True: curses.clear() h=time.strftime('%H') m=time.strftime('%M') s=time.strftime('%S') sec0=int(s[1]) sec1=int(s[0]) min0=int(m[1]) min1=int(m[0]) hour0=int(h[1]) hour1=int(h[0]) number(68,0,sec0) number(56,0,sec1) colon(3,53) number(40,0,min0) number(28,0,min1) colon(3,25) number(12,0,hour0) number(0,0,hour1) curses.mvaddstr(12,0,'Для выхода нажмите клавишу "q"') curses.refresh() if keyboard.is_pressed('q'): break curses.endwin() return 0 if __name__ == '__main__': sys.exit(main())
Отредактировано py.user.next (Фев. 19, 2023 21:35:11)
Офлайн
ну собственно тоже самое, но благодарю, решение чуть другое конечно
Офлайн