deftranslate_number_to_chinese(number):"""
:type number: int|long
:rtype: string
"""ifnotisinstance(number,int)andnotisinstance(number,long):raiseValueError('number must be integer')ifnumber==0:returnCHINESE_ZEROwords=[]ifnumber<0:words.append(CHINESE_NEGATIVE)number=-number# Begin core loop.# Version 0.1forposition,digitinreversed(list(_enumerate_digits(number))):unit=position%len(CHINESE_UNITS)group=position//len(CHINESE_UNITS)ifdigit!=0:words.append(CHINESE_DIGITS[digit])words.append(CHINESE_UNITS[unit])ifunit==0:words.append(CHINESE_GROUP_UNITS[group])# End core loop.return''.join(words)
对于这种情况会比较多的测试,一般会把各种需要测试的输入和期望输出写在一个数据文件里。于是可以在测试方法中读入文件中的每一组数据,用 for 循环依次进行测试。如果所有的测试用例都能成功也就没什么问题,但如果有些用例会失败,一旦某个用例失败,测试方法就会停止,后面的数据就不会再被测到。这样每次都只能看到第一个出现的错误,无法得到完整的测试结果。在改 bug 的时候,也很容易出现按住葫芦浮起瓢的事情。
# Begin core loop.# Version 0.2group_is_zero=Trueneed_zero=Falseforposition,digitinreversed(list(_enumerate_digits(number))):unit=position%len(CHINESE_UNITS)group=position//len(CHINESE_UNITS)ifdigit!=0:ifneed_zero:words.append(CHINESE_ZERO)words.append(CHINESE_DIGITS[digit])words.append(CHINESE_UNITS[unit])group_is_zero=group_is_zeroanddigit==0ifunit==0:words.append(CHINESE_GROUP_UNITS[group])need_zero=(digit==0and(unit!=0orgroup_is_zero))ifunit==0:group_is_zero=True# End core loop.
# Begin core loop.# Version 0.4group_is_zero=Trueneed_zero=Falseforposition,digitinreversed(list(_enumerate_digits(number))):unit=position%len(CHINESE_UNITS)group=position//len(CHINESE_UNITS)ifdigit!=0:ifneed_zero:words.append(CHINESE_ZERO)ifdigit!=1orunit!=1ornotgroup_is_zeroor(group==0andneed_zero):words.append(CHINESE_DIGITS[digit])words.append(CHINESE_UNITS[unit])group_is_zero=group_is_zeroanddigit==0ifunit==0andnotgroup_is_zero:words.append(CHINESE_GROUP_UNITS[group])need_zero=(digit==0and(unit!=0orgroup_is_zero))ifunit==0:group_is_zero=True# End core loop.