我期末考试有这个问题,我想不出来。我最初尝试使用for i in range(len(string)-1)循环来比较索引中字符的数值。
我知道我可以用一个列表对列表进行排序,然后反向打印,但我们被告知不能使用列表或反向排序功能。
也不能使用print(string[::-1])技术,因为这不是要反转一个字符串,而是将其按降序排列。例如,字符串”hello”的输出为”ollhe”而不是”olleh”,字符串”world”将输出为”wrold”而不是”dlrow”
如果有人能帮助我,我会感激的,谢谢。
是否需要按字母降序打印字符串?
埃多克斯1〔0〕怎么样
@根据我在问题中的理解,威廉姆不应该使用[::-1]
@卢卡乔奇,我以为他们只是在澄清,他们不只是想要弦的反面。
@威廉姆,你可能是对的,但我注意到他也不应该使用排序函数。
@卢卡乔奇啊,我错过了
“”world”会输出,”wlord””——你确定这是按字母顺序递减的吗?
他们可能不想要这个答案,但计数方式:import collections; letters = collections.Counter(input); return ”.join(chr(idx) * letters[chr(idx)] for idx in xrange(ord(max(letters.keys())), 0, -1))
我对”世界”输出的错误,应该是”wrold”,谢谢你的输入。
用几个字符串如st尝试以下操作。
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并将其从字符串中移除。
在python 2.x中工作。可能需要在python 3.x中进行一些更改(缩进)。
这将在3.x中工作而不做任何更改。(除了印刷品,但还是被注释掉了)
我唯一要补充的是,在st中有大写字母的情况下。有两种处理方法,您可以在处理之前添加一个st = st.lower()命令,然后大写字母将被处理为普通字母,或者在您有st[i]使用ord(st[i])的任何地方,设置您的max = 0并使用result += chr(max),然后大写字母将在小写字母后自行排序。
@谢谢,我会用你的添加来编辑答案。
谢谢!这看起来像是我需要的代码。我有类似你的,但我没有嵌套的for循环。
目前还不清楚该函数是否只对字母或标点(和空格)起作用,所以我只假设字母表中的26个字母。然而,这种扩展是直接的。
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(),因为它产生了一个列表。但是你总是可以按照你想要的相反顺序对字母表中的”符号”进行硬编码。既然不允许使用列表,这是否也意味着列表/生成器的理解也不允许?您可以通过将语法更改为:
result = ”
for letter in alphabet:
result += letter * word.count(letter)
示例
descent_alphabetically(‘Hello’)
‘ollhe’
>>> descent_alphabetically(‘world’)
‘wrold’
>>> descent_alphabetically(‘alphabet’)
‘tplhebaa’
。