On 29/08/2021 20.06, Peter Otten wrote: ... > OK, maybe a bit complicated... but does it pay off if you want to > generalize? > >>>> def roll_die(faces): > while True: yield random.randrange(1, 1 + faces) > >>>> def hmt(faces, dies): > for c, d in enumerate(zip(*[roll_die(faces)]*dies), 1): > if len(set(d)) == 1: return c, d
Curiosity: why not add dies as a parameter of roll_die()? Efficiency: - wonder how max( d ) == min( d ) compares for speed with the set() type constructor? - alternately len( d ) < 2? - or len( d ) - 1 coerced to a boolean by the if? - how much more efficient is any of this (clever thinking!) than the OP's basic, simpler, and thus more readable, form? English language 'treachery': - one die - multiple dice (probably not followed in US-English (can't recall), particularly on computers running the Hollywood Operating System). Continuous Education: Thanks for the reminder that enumerate() can be seeded with a "start" value! -- Regards, =dn -- https://mail.python.org/mailman/listinfo/python-list