No, a pokud někdo chce "more pythonic way", stačí nebýt líný a zeptat se strejdy gůgla :-D
"python weigthed choice?" a hned první odkaz je:
http://stackoverflow.com/questions/3679694/a-weighted-version-of-random-choice
No, a pokud někdo chce "more pythonic way", stačí nebýt líný a zeptat se strejdy gůgla :-D
"python weigthed choice?" a hned první odkaz je:
http://stackoverflow.com/questions/3679694/a-weighted-version-of-random-choice
Kdysi jsem používal takovýto laický postup:
from random import randint
prav_jevu_a=30 # procent
prav_jevu_b=70
bazen="a"*prav_jevu_a+"b"*prav_jevu_b
# nahodny vyber zohlednujici pravdepodobnost
volba=""
for i in xrange(1,10000): # kolik pokusu
volba+=bazen[randint(0,len(bazen)-1)] # nahodny vyber z bazenu
# no a jak to vyslo:
print 70/30.0 # idealni pripad
print float(volba.count("b"))/volba.count("a") # uspesnost "nahodneho" vyberu
Takže ještě jedno imho elegantní řešení, které ve smyčce detekuje libovolnou klávesu (ukončit lze stiskem "x"), pomocí modulu curses:
import curses,time,sys
def main(stdscr):
stdscr.nodelay(1)
a=0; c=0
while c != ord("x"):
a+=1
c = stdscr.getch() # cti stav keyb
if c != -1:
print "[stiskl jsi",chr(c),"a cislo je",a,"] ",
else: # vracena -1 znamena ze kbd vstup neobsahoval zadny znak
print a,
sys.stdout.flush(); time.sleep(0.3)
if __name__ == '__main__':
curses.wrapper(main)
print "pokracovani programu..."
# je to takove polovicate reseni, reaguje na stisk Ctrl+C, pote ukonci smycku a pokracuje v pgmu.
import time, sys
a=0; print "Cislo si stopni Ctrl+C"
try:
while 1:
a+=1; print a,; time.sleep(0.3); sys.stdout.flush()
except KeyboardInterrupt:
pass
print"\n vybrano bylo cislo",a