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"
如果有人能帮助我,我会感激的,谢谢。
用几个字符串如
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"。
你说名单是允许的。我不知道这是否也会延伸到
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' |
。