Не волнуйтесь о "хорошем" семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как генератор отобран. Существуют другие вещи, как бы то ни было. волноваться о. См. Ловушки в Генерации случайных чисел .
Что касается аппаратных генераторов случайных чисел, эти физические источники должны быть измерены, и измерительный процесс имеет систематические ошибки. Вы могли бы найти, что "псевдо" случайные числа имели более высокое качество, чем "реальные" случайные числа.
Вы хотите использовать модуль unicodedata :
import unicodedata
unicodedata.numeric(u'⅕')
Это напечатает:
0.20000000000000001
Если символ не имеет числового значения, тогда unicodedata. numeric (unichr [, default])
вернет значение по умолчанию, или, если значение по умолчанию не указано, вызовет ошибку ValueError.
Поскольку в Unicode определено только фиксированное количество дробей, словарь кажется подходящим:
Fractions = {
u'¼': 0.25,
u'½': 0.5,
u'¾': 0.75,
u'⅕': 0.2,
# add any other fractions here
}
Обновление: модуль unicodedata
- гораздо лучшее решение.
Может быть, вы могли бы разложить дробь с помощью модуля «unicodedata» , а затем найти символ SLASH FRACTION , и тогда это будет просто деление.
Например:
>>> import unicodedata
>>> unicodedata.lookup('VULGAR FRACTION ONE QUARTER')
u'\xbc'
>>> unicodedata.decomposition(unicodedata.lookup('VULGAR FRACTION ONE QUARTER'))
'<fraction> 0031 2044 0034'
Обновление: Я оставлю этот ответ здесь для справки, но использование unicodedata.numeric () в соответствии с ответом Карла - гораздо лучшая идея.
В Python 3.1 вам не нужна буква «u», и она выдаст 0,2 вместо 0.20000000000000001. .
>>> unicodedata.numeric('⅕')
0.2