注意不是一下子将多行的输入一起排列,是一次只排列一行。我的做法是先把字母提取到一个字符串里,其他字符提取到另一个字符串里。字母的提取过程中已经包含了排序,最后输出时按照对应位置输出字母或字符。
try: while True: str1 = str(input()) cha = '' specha = '' k = [] flag = 0 for i in str1: lcha = int(len(cha)) flag1 = 0 if(ord(i) >= 65 and ord(i) <= 90): if(lcha == 0): cha += i else: for j in range(lcha): if(ord(cha[j]) >= 65 and ord(cha[j]) <= 90): if(ord(i) < ord(cha[j])): cha = cha[0:j] + i + cha[j:lcha] flag1 = 1 break if(ord(cha[j]) >= 97 and ord(cha[j]) <= 122): if(ord(i) < ord(cha[j]) - 32): cha = cha[0:j] + i + cha[j:lcha] flag1 = 1 break; if(flag1 == 0): cha += i flag += 1 elif(ord(i) >= 97 and ord(i) <= 122): if(lcha == 0): cha += i else: for j in range(lcha): if(ord(cha[j]) >= 65 and ord(cha[j]) <= 90): if(ord(i)-32 < ord(cha[j])): cha = cha[0:j] + i + cha[j:lcha] flag1 = 1 break if(ord(cha[j]) >= 97 and ord(cha[j]) <= 122): if(ord(i) < ord(cha[j])): cha = cha[0:j] + i + cha[j:lcha] flag1 = 1 break if(flag1 == 0): cha += i flag += 1 else: specha += i k.append(flag) flag += 1 res_str = '' num1 = 0 num2 = 0 for i in range(len(str1)): if(num1 < len(specha) and i == k[num1]): res_str += specha[num1] num1 += 1 else: if(num2 < len(cha)): res_str += cha[num2] num2 += 1 print(res_str) except: pass