On 2021-09-02 11:28:21 -0300, Hope Rouselle wrote: > dn <[email protected]> writes: > > On 29/08/2021 08.46, Hope Rouselle wrote: > >> Here's my solution: > >> > >> --8<---------------cut here---------------start------------->8--- > >> def how_many_times(): > >> x, y = 0, 1 > >> c = 0 > >> while x != y: > >> c = c + 1 > >> x, y = roll() > >> return c, (x, y) > > > >> > >> Why am I unhappy? I'm wish I could confine x, y to the while loop. > >> The introduction of ``x, y = 0, 1'' must feel like a trick to a > >> novice. How would you write this? [...] > But perhaps we may agree that while rolling dice until a certain > success, we want to roll them while something happens or doesn't happen. > One of the two. So while-True is a bit of a jump. Therefore, in this > case, the easier and more natural option is to say while-x-not-equal-y. > > But this approach seems to force me into initializing x, y with > different values.
You can get around this by using NaN:
def how_many_times():
c, x, y = 0, math.nan, math.nan
while x != y:
c = c + 1
x, y = roll()
return c, x, y
Not sure if this is an improvement. Now you have to explain to your
students why math.nan != math.nan.
When I need a guaranteed unique value I often just use object():
def how_many_times():
c, x, y = 0, object(), object()
while x != y:
c = c + 1
x, y = roll()
return c, x, y
Of course now you are back to two different values, but they look the
same. Which may be better or worse for your students. Plus x and y are
now bound to objects of different types during their lifetime, which may
be a bit dicey.
hp
--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | [email protected] | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
signature.asc
Description: PGP signature
-- https://mail.python.org/mailman/listinfo/python-list
