关于python:创建一个以降序(NOT REVERSE)顺序返回给定字符串的函数

Create a function that returns a given string in descending(NOT REVERSE) order

我期末考试有这个问题,我想不出来。我最初尝试使用for i in range(len(string)-1)循环来比较索引中字符的数值。

我知道我可以用一个列表对列表进行排序,然后反向打印,但我们被告知不能使用列表或反向排序功能。

也不能使用print(string[::-1])技术,因为这不是要反转一个字符串,而是将其按降序排列。例如,字符串"hello"的输出为"ollhe"而不是"olleh",字符串"world"将输出为"wrold"而不是"dlrow"

如果有人能帮助我,我会感激的,谢谢。


用几个字符串如st尝试以下操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def finalexamquestion(st):
    st = st.lower()
    max = 'a'
    result =""
    for j in range(len(st)):
        for i in range(len(st)):
            if st[i] >= max:
                max = st[i]
                idx = i
        st = st[:idx]+st[idx+1:]
        result += max
        max = 'a'
#    print result
    return result

使用字符的ASCII值在字符串中查找最大值(后面是字母表)。这基本上是一个处理字符串和排序字符的排序函数。您可以实现一个更好的排序算法,如QuickSort(我的实现使用的是O(n^2))。有更好的O(nlogn)算法,但这里不是重点,所以我用它来实现。

对于字符串中的每个字符,查找max并将其从字符串中移除。


目前还不清楚该函数是否只对字母或标点(和空格)起作用,所以我只假设字母表中的26个字母。然而,这种扩展是直接的。

1
2
3
4
5
def descent_alphabetically(word):
    # Lazy way of constructing 'zyxw...dcba'
    alphabet = ''.join(chr(i) for i in xrange(122, 96, -1))
    word = word.lower()
    return ''.join(letter * word.count(letter) for letter in alphabet)

这个想法是,你按相反的顺序浏览字母表中的字母,并计算出你的单词中有多少个字母。如果计数为0,则字符串乘法将为空,例如,如果您有字母"a"3,则会得到"aaa"。

你说名单是允许的。我不知道这是否也会延伸到range(),因为它产生了一个列表。但是你总是可以按照你想要的相反顺序对字母表中的"符号"进行硬编码。既然不允许使用列表,这是否也意味着列表/生成器的理解也不允许?您可以通过将语法更改为:

1
2
3
result = ''
for letter in alphabet:
    result += letter * word.count(letter)

示例

1
2
3
4
5
6
descent_alphabetically('Hello')
'ollhe'
>>> descent_alphabetically('world')
'wrold'
>>> descent_alphabetically('alphabet')
'tplhebaa'