plan = [
[ 2000.0 , 2000.0 , 2000.0 , 2000.0 , 2000.0 , 2000.0 ] ,
[ 2000.0 , 2000.0 , 2000.0 , 2000.0 , 2000.0 , 2000.0 , 2000.0 ] ,
[ 2000.0 , 2000.0 , 1250.0 , 1250.0 , 1250.0 , 1250.0 , 1250.0 ] ,
[ 1250.0 , 1250.0 , 1250.0 , 1250.0 , 1250.0 , 1250.0 , 1250.0 ] ,
[ 1250.0 , 1250.0 , 1250.0 ]
]
from itertools import zip_longest
def formata( n, casas_decimais) :
try :
return f'{float(n):.{casas_decimais}f}'
except ValueError :
return n
tamanho = 15
# o "size" na string abaixo é substituído pelo valor da variável "tamanho"
print ( ( '{:<{size}}' * len ( plan) ) .format ( *map ( lambda x: f'{x + 1}º PERÍODO' , range ( len ( plan) ) ) , size= tamanho) )
# mas dentro de uma f-string tem que ser a própria variável
print ( f'{"1º PERÍODO":<{tamanho}}{"2º PERÍODO":<{tamanho}}{"3º PERÍODO":<{tamanho}}{"4º PERÍODO":<{tamanho}}{"5º PERÍODO":<{tamanho}}' )
for metas in zip_longest( *plan, fillvalue= '' ) :
print ( ( '{:<{size}}' * len ( metas) ) .format ( *map ( lambda x: formata( x, 2 ) , metas) , size= tamanho) )
cGxhbiA9IFsKICAgIFsyMDAwLjAsIDIwMDAuMCwgMjAwMC4wLCAyMDAwLjAsIDIwMDAuMCwgMjAwMC4wXSwKICAgIFsyMDAwLjAsIDIwMDAuMCwgMjAwMC4wLCAyMDAwLjAsIDIwMDAuMCwgMjAwMC4wLCAyMDAwLjBdLAogICAgWzIwMDAuMCwgMjAwMC4wLCAxMjUwLjAsIDEyNTAuMCwgMTI1MC4wLCAxMjUwLjAsIDEyNTAuMF0sCiAgICBbMTI1MC4wLCAxMjUwLjAsIDEyNTAuMCwgMTI1MC4wLCAxMjUwLjAsIDEyNTAuMCwgMTI1MC4wXSwKICAgIFsxMjUwLjAsIDEyNTAuMCwgMTI1MC4wXQpdCgpmcm9tIGl0ZXJ0b29scyBpbXBvcnQgemlwX2xvbmdlc3QKCmRlZiBmb3JtYXRhKG4sIGNhc2FzX2RlY2ltYWlzKToKICAgIHRyeToKICAgICAgICByZXR1cm4gZid7ZmxvYXQobik6LntjYXNhc19kZWNpbWFpc31mfScKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIHJldHVybiBuCgp0YW1hbmhvID0gMTUKIyBvICJzaXplIiBuYSBzdHJpbmcgYWJhaXhvIMOpIHN1YnN0aXR1w61kbyBwZWxvIHZhbG9yIGRhIHZhcmnDoXZlbCAidGFtYW5obyIKcHJpbnQoKCd7Ojx7c2l6ZX19JyAqIGxlbihwbGFuKSkuZm9ybWF0KCptYXAobGFtYmRhIHg6IGYne3ggKyAxfcK6IFBFUsONT0RPJywgcmFuZ2UobGVuKHBsYW4pKSksIHNpemU9dGFtYW5obykpCiMgbWFzIGRlbnRybyBkZSB1bWEgZi1zdHJpbmcgdGVtIHF1ZSBzZXIgYSBwcsOzcHJpYSB2YXJpw6F2ZWwKcHJpbnQoZid7IjHCuiBQRVLDjU9ETyI6PHt0YW1hbmhvfX17IjLCuiBQRVLDjU9ETyI6PHt0YW1hbmhvfX17IjPCuiBQRVLDjU9ETyI6PHt0YW1hbmhvfX17IjTCuiBQRVLDjU9ETyI6PHt0YW1hbmhvfX17IjXCuiBQRVLDjU9ETyI6PHt0YW1hbmhvfX0nKQoKZm9yIG1ldGFzIGluIHppcF9sb25nZXN0KCpwbGFuLCBmaWxsdmFsdWU9JycpOgogICAgcHJpbnQoKCd7Ojx7c2l6ZX19JyAqIGxlbihtZXRhcykpLmZvcm1hdCgqbWFwKGxhbWJkYSB4OiBmb3JtYXRhKHgsIDIpLCBtZXRhcyksIHNpemU9dGFtYW5obykp