In the question referenced above,asolutionwasfoundforturninganumbeintoaname.thisquestionasksjusttheopposite.howcanyouconvert
导入字符串
head _ char=' '.join (sorted (string.ascii _ letters ' _ ' )
tail _ char=' '.join (sorted (string.digits head _ char ) )
HEAD_BASE,tail_base=len(head_char ),len (tail _ char ) )。
efnumber_to_name(number ) :
' convertanumberintoavalididentifier.'
if number HEAD_BASE:
return HEAD_CHAR[number]
q,r=divmod(number-head_base,TAIL_BASE ) ) ) ) ) ) ) )。
返回number _ to _ name (q ) TAIL_CHAR[r]
[number_to_name(n ) forninrange ) 117]
[a ',b ',c ',d ',e ',f ',g ',h ',j ',k ',l ',m ',n ',o ',p] 「d”,“f”,“g”,“h A5、A6、A7、A8、A9、AA、AB、AC、AE、AG、AH、AI。 AU、AV、AW、AX、AY、AZ、A_、Ab、Ac、Ae、Af、Ag。 ' As '、' At '、' Au '、' Av '、' Aw '、' Ax '、' Ay '、' Az '、' B0']
efname_to_number(name ) :
assert name,' Name must exist!'
head,*tail=name
number=head_char.index(head ) ) ) )。
for position,字符识别(tail ) :
if位置:
number *=TAIL_BASE
else:
number =HEAD_BASE
number=tail_char.index(char ) )。
返回编号
[ name _ to _ number (number _ to _ name (n ) ]forninrange ) 117]
[0、1、2、3、4、5、6、7、8、9、10、12、13、14、15、16、17、18、19、20、23、24、25、26 64、66 7、78、79、80、81、82、83、84、85、86、87、88、90、91、92、93、95、97、98、99、100、101
thefunctionnumber _ to _ nameworksperfectly,andname _ to _ numberworksupuntilitgetstonumber 116.athatpoint,thefuncting
solutionbasedonrecursive ' s answer :
导入字符串
head _ char=' '.join (sorted (string.ascii _ letters ' _ ' )
tail _ char=' '.join (sorted (string.digits head _ char ) )
HEAD_BASE,tail_base=len(head_char ),len (tail _ char ) )。
efname_to_number(name ) :
if not name.isidentifier () :
raisevalueerror (' namemustbeapythonidentifier!' )
head,*tail=name
number=head_char.index(head ) ) ) )。
for char in tail:
number *=TAIL_BASE
number=tail_char.index(char ) )。
returnnumbersum (head _ base * tail _ base * * pforpinrange (len ) tail ) )
解决方案
统一编号,theseidentifiersdon ' tyieldtotraditionalconstantbaseencodingtechniques.for example ' a ' actslikeazero, but leading ' a ' schangethevalue.innormalnumbersystemsleadingzeroesdonot.therecouldbemultipleapproaches,butisetledononeales
efname_to_number(name ) :
assert name,' Name must exist!'
skipped=sum (head _ base * tail _ base * * iforiinrange (len (name )- 1 ) )
val=reduce (
lambda a,b : a * tail _ base tail _ char.index (b,
name[1:],
head_char.index(name[0] )
返回val skipped