Weighted random selection
You have probably an error in your first for loop:

    weights[i] = start+weights[i]
    start += weights[i]


as the resulting value of start (BTW not very descriptive name) will be increased twice by weights[i], so the fix may be

    start += weights[i]
    weights[i] = start




But anyway, why you accumulate weights of individual words and moreover you assign the final result (which will be always 1, of course) in the start variable, if you never use it? IMHO your program perform something other than you want.



As your two input lists correspond one to other, why not use the zip() function to make pairs of corresponding values:

word_weights = zip(words, weights)


and use it in your for loops?



Why don't utilize the enumerate() function for obtaining indices without any effort?