Your code is pretty good and well written. I would just change a bit the inside of "while flag:" by having the part where you test the validity of cast_again at the end as the last case (else).
That is, instead of
while 1:
if cast_again not in ('r', 's', 'e'):
# Handler
…
continue
if cast_again == 'r':
…
elif cast_again == 's':
…
elif cast_again == 'e':
…
write
while 1:
if cast_again == 'r':
…
elif cast_again == 's':
…
elif cast_again == 'e':
…
else:
# Handler
…