def roll(d_str): import random # the following line can be broken into several lines: # num, size = map(int, d_str.split('d'))[:2] # suppose `d_str` has the value "4d20". After the following line, # `roll_fragments` will have the value ["4", "20"]. That is, # `roll_fragments` is a list of strings. roll_fragments = d_str.split('d') # We'd like to try to prevent bad input to this function from crashing the # program. Assume the function is called with errant input of # d_str="4d20d10". We can Choose to use only the first two values from the # `split` function in the previous line by using Python's list slicing # syntax. The following line, translated to English would read: "set the # variable `num_size` equal to the first two elements of the # `roll_fragments` list": num_size = roll_fragments[:2] # We ultimately need to determine the integer (int) representation of both # of these variables. We can do that with the following: num, size = map(int, num_size) # In English, the previous line reads: set `num` and `size` to the first # and second values (respectively) returned by calling the built-in # function `int` for each element in the list `num_size`. Recall that the # list num_size will have at most two elements in it. # To reiterate, the lines: # roll_fragments = d_str.split('d') # num_size = roll_fragments[:2] # num, size = map(int, num_size) # are together equivalent to the single line: # num, size = map(int, d_str.split('d'))[:2] # For more information about list slicing see: # http://stackoverflow.com/a/509295/60366 # For more information about the `map` and `int` Python built-in functions # see: # http://docs.python.org/2/library/functions.html#map # http://docs.python.org/2/library/functions.html#int face_values = range(1, size+1) rolls = [str(random.choice(face_values)) for i in xrange(num)] print(' '.join(rolls))