import re
import random
regex = r"(?m)^[^\/#]*?([.+-]*\d+(?:\.\d+)?(?:e[+-]?\d+)?) +([^\n ]*)"
test_str = "" "
0.3 играть
0.3 кодить
0.2 спать
0.01 сделать уборку
0.5 разминка шеи
-0.7 временно отключённый пункт
Комментарии свободно где угодно можно писать
Даже тут 0.4 гулять
" ""
matches = re.finditer ( regex, test_str)
r= [ ]
s= [ ]
for matchNum, match in enumerate( matches, start= 1 ) :
class MyException( Exception) :
...
N = len( match.groups ( ) )
if ( N== 2 ) :
try:
ww= float ( match.group ( 1 ) )
if ( ww<= 0 ) :
r+= [ ww]
s+= [ match.group ( 2 ) ]
print( f'{r[-1]} : {s[-1]}' )
except MyException as e:
print( f" - {match.group(2)}" )
except Exception as e:
print( f'Err : {e} : {match.group()}' )
N= sum( r)
print( '\n ' )
def roll( ) :
if ( N== 0 ) :
print( "Пусто" )
return
x= random.random ( ) * N
y= x
i= 0
while ( x> r[ i] ) :
x-= r[ i]
i+= 1
print( f'{y:.4f}/{N:.4f} : {x:.4f}/{r[i]:.4f} : {s[i]}' )
roll( )
#print(g)
#print(f'{i} :: {match.group(i+1)}')
#for groupNum in range(0, len(match.groups())):
# groupNum = groupNum + 1
# print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
CmltcG9ydCByZQppbXBvcnQgcmFuZG9tCgpyZWdleCA9IHIiKD9tKV5bXlwvI10qPyhbListXSpcZCsoPzpcLlxkKyk/KD86ZVsrLV0/XGQrKT8pICsoW15cbl0qKSIKCnRlc3Rfc3RyID0gIiIiCgowLjMg0LjQs9GA0LDRgtGMCjAuMyDQutC+0LTQuNGC0YwKMC4yINGB0L/QsNGC0YwKMC4wMSDRgdC00LXQu9Cw0YLRjCDRg9Cx0L7RgNC60YMKMC41INGA0LDQt9C80LjQvdC60LAg0YjQtdC4CgotMC43INCy0YDQtdC80LXQvdC90L4g0L7RgtC60LvRjtGH0ZHQvdC90YvQuSDQv9GD0L3QutGCCtCa0L7QvNC80LXQvdGC0LDRgNC40Lgg0YHQstC+0LHQvtC00L3QviDQs9C00LUg0YPQs9C+0LTQvdC+INC80L7QttC90L4g0L/QuNGB0LDRgtGMCtCU0LDQttC1INGC0YPRgiAwLjQg0LPRg9C70Y/RgtGMCgoKCiIiIgoKbWF0Y2hlcyA9IHJlLmZpbmRpdGVyKHJlZ2V4LCB0ZXN0X3N0cikKcj1bXQpzPVtdCgoKCmZvciBtYXRjaE51bSwgbWF0Y2ggaW4gZW51bWVyYXRlKG1hdGNoZXMsIHN0YXJ0PTEpOgogICAgY2xhc3MgTXlFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICAgICAuLi4KICAgIE49bGVuKG1hdGNoLmdyb3VwcygpKQogICAgaWYgKE49PTIpOgogICAgICAgIHRyeToKICAgICAgICAgICAgd3c9ZmxvYXQobWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgICAgIGlmICh3dzw9MCk6CiAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigpCiAgICAgICAgICAgIHIrPVt3d10KICAgICAgICAgICAgcys9W21hdGNoLmdyb3VwKDIpXQogICAgICAgICAgICBwcmludChmJ3tyWy0xXX0gOiB7c1stMV19JykgICAgICAgICAgICAKICAgICAgICBleGNlcHQgTXlFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgcHJpbnQoZiIgICAgLSB7bWF0Y2guZ3JvdXAoMil9IikKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGYnRXJyIDoge2V9IDoge21hdGNoLmdyb3VwKCl9JykKCk49c3VtKHIpCnByaW50KCdcbicpCmRlZiByb2xsKCk6CiAgICBpZiAoTj09MCk6CiAgICAgICAgcHJpbnQoItCf0YPRgdGC0L4iKQogICAgICAgIHJldHVybgogICAgeD1yYW5kb20ucmFuZG9tKCkqTgogICAgeT14CiAgICBpPTAKICAgIHdoaWxlICh4PnJbaV0pOgogICAgICAgIHgtPXJbaV0KICAgICAgICBpKz0xCiAgICBwcmludChmJ3t5Oi40Zn0ve046LjRmfSA6IHt4Oi40Zn0ve3JbaV06LjRmfSA6IHtzW2ldfScpCgoKcm9sbCgpCgojcHJpbnQoZykKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAjcHJpbnQoZid7aX0gOjoge21hdGNoLmdyb3VwKGkrMSl9JykKICAgICNmb3IgZ3JvdXBOdW0gaW4gcmFuZ2UoMCwgbGVuKG1hdGNoLmdyb3VwcygpKSk6CiAgICMgICAgZ3JvdXBOdW0gPSBncm91cE51bSArIDEKICAgICAgICAKICAgICAjICAgcHJpbnQgKCJHcm91cCB7Z3JvdXBOdW19IGZvdW5kIGF0IHtzdGFydH0te2VuZH06IHtncm91cH0iLmZvcm1hdChncm91cE51bSA9IGdyb3VwTnVtLCBzdGFydCA9IG1hdGNoLnN0YXJ0KGdyb3VwTnVtKSwgZW5kID0gbWF0Y2guZW5kKGdyb3VwTnVtKSwgZ3JvdXAgPSBtYXRjaC5ncm91cChncm91cE51bSkpKQoKIyBOb3RlOiBmb3IgUHl0aG9uIDIuNyBjb21wYXRpYmlsaXR5LCB1c2UgdXIiIiB0byBwcmVmaXggdGhlIHJlZ2V4IGFuZCB1IiIgdG8gcHJlZml4IHRoZSB0ZXN0IHN0cmluZyBhbmQgc3Vic3RpdHV0aW9uLgo=