我有一个字符串,其中包含范围中的第一列,以及范围中的最后一列 - 例如AF:IK
。
如何判断'BX'是否在给定范围内?
答案 0 :(得分:5)
这个问题可以被视为类似于你处理基数26数学问题的方法。让我们处理A = 1,B = 2,C = 3等。然后AA将是1 * 26 + 1。
让我们在Python中表达这个
letters = '0ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def ordinal(values):
result = 0
for value in values:
result *= 26
result += letters.index(value)
return result
print ordinal('A')
# should be 1
print ordinal('AA')
# should be 27
print ordinal('AF')
# should be 33
print ordinal('IK')
# should be 254
print ordinal('AF') < ordinal('BX') < ordinal('IK')
# should be True
答案 1 :(得分:5)
利用base
的{{1}}参数 - 它可以高达36。
int
(我使用>>> from functools import partial
>>> ht = partial(int, base=36)
>>>
>>> r = "AF:IK"
>>> lo, hi = r.split(':')
>>> ht(lo) < ht("BX") < ht(hi)
True
>>> ht(lo) < ht("BXA") < ht(hi)
False
创建了函数ht
,以便更简单地使用。)
答案 2 :(得分:1)
这样的事情应该这样做:
#!/usr/bin/env python
def to_base26(string):
# Convert an alphabet string base 26
col = 0
pos = 0
for char in string.upper()[::-1]:
col += 26**pos * (ord(char) - ord('A') + 1)
pos += 1
return col
def check_range(lower,upper,query):
if to_base26(lower) <= to_base26(query) and to_base26(query) <= to_base26(upper):
print 'In Range'
else:
print 'Not in Range'
check_range('AF', 'IK', 'BX')