逆序索引第一个字母字符(情况一)后,再逆序索引第一个非字母字符(情况二),然后就可以输出该字符子串了。
在最后的开头时,需要区分是目前索引到情况一还是情况二了,然后再判断输出的情况。

while True:
    try:
        str1 = str(input())

        k = len(str1)
        flag1 = 0
        flag2 = 0
        m = k
        n = 0

        for i in range(k-1, -1, -1):
            if(i != 0 and flag1 == 0):
                if(ord(str1[i]) >= 65 and ord(str1[i]) <= 90) or (ord(str1[i]) >= 97 and ord(str1[i]) <= 122):
                    flag1 = 1
                    m = i
            if(i != 0 and flag1 == 1):
                if(ord(str1[i]) < 65 or (ord(str1[i]) > 90 and ord(str1[i]) < 97) or ord(str1[i]) > 122):
                    n = i
                    print(str1[n+1:m+1], end=' ')
                    flag1 = 0
            if(i == 0 and flag1 == 1 and ((ord(str1[0]) >= 65 and ord(str1[i]) <= 90) or (ord(str1[i]) >= 97 and ord(str1[i]) <= 122))):
                print(str1[0:m+1],end = ' ')
                break
            elif(i == 0 and flag1 == 1and (ord(str1[i]) < 65 or (ord(str1[i]) > 90 and ord(str1[i]) < 97) or ord(str1[i]) > 122)):
                print(str1[1:m+1], end = ' ')
                break
            elif(i == 0 and flag1 == 0):
                print(str1[0])
    except:
        break