Python实现电话号码分身

        继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
    输入:
    第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身
    (长度在3到10000之间)。
    输出:
    输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。


    示例:
    输入:
    4
    EIGHT
    ZEROTWOONE
    OHWETENRTEO
    OHEWTIEGTHENRTEO
    输出:
    0
    234
    345
    0345

题目分析:

首先将题目对应的数字、对应的数字码、数字码对应的英文列出一个表:

原码 +8后的原码 取个位 英文码
0 8 8 EIGHT
1 9 9 NINE
2 10 0 ZERO
3 11 1 ONE
4 12 2 TWO
5 13 3 THREE
6 14 4 FOUR
7 15 5 FIVE
8 16 6 SIX
9 17 7 SEVEN

      观察英文码,发现数字0对应的英文码EIGHT中字符‘G’在所有英文码中是独有的。也就是说,在打乱的英文码中,出现字符G的次数等于出现数字0的次数。同理,数字2的英文码ZERO的字符‘Z’、数字4的英文码TWO的字符‘W’、数字6的英文码FOUR字符‘U’、数字8的英文码SIX的字符‘X’,这5个数字的英文码都有独特的字符,可以唯一的表示他们数字的个数。

      在剩下的5个数字中,观察规律,不难看出数字3的英文码ONE中的字符‘O’,除了已知数量的2、4、6外也是唯一的,也就是说将字符O的总数减去2、4、6数字的数量,剩下的就是数字3的数量。以此类推得出其余所有数字的数量,这里不再一一赘述。

      在代码中,使用count()函数来获取每个字符的数量。count()函数的意思是在字符串中取子串的数量,返回整数类型。语法为string.count(substring)

下面展示代码:

time = int(input())
s = []


for i in range(time):
    a = input()
    s.append(a)

for element in s:
    n0 = element.count('G')
    n2 = element.count('Z')
    n4 = element.count('W')
    n6 = element.count('U')
    n8 = element.count('X')

    n3 = element.count('O') - n2 - n4 - n6
    n5 = element.count('T') - n0 - n4
    n7 = element.count('F') - n6
    n9 = element.count('S') - n8

    n1 = element.count('I') - n0 - n7 - n8

    print('0' * n0 + '1' * n1 + '2' * n2 + '3' * n3 + '4' * n4 + '5' * n5 + '6' * n6 +
          '7' * n7 + '8' * n8 + '9' * n9)

猜你喜欢

转载自blog.csdn.net/TCatTime/article/details/81877167