如何只使用一个循环打印字符串中的“最少”字符?

2024-05-20 00:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图打印一个字符串中的“最小”字符,如果a字符比另一个字符更接近字母表的开头,那么它会比另一个字符小,并且它是第一个索引位置。 我应该只使用1个循环来确定字符的索引,不允许使用min、max、index、find、ord、chr或list。 例如:

leastChar("yRrcDefxBqubSlyjYelskd")

应产生:

^{pr2}$

目前我有:

def leastChar(inputString):
    lowerString = inputString.lower()
    print(lowerString)
    indexLength = (len(lowerString) - 1)
    print(indexLength)
    index = 0
    for i in range(indexLength):
        if lowerString[i] < lowerString[i+1]:
            index = i
    print("The least char is '{0}' and occurs at position {1}".format(inputString[index], index))

返回:

leastChar("yRrcDefxBqubSlyjYelskd")
yrrcdefxbqubslyjyelskd
21
The least char is 'l' and occurs at position 18

我尝试过多种不同的方法,但即使使用超过一个循环,我发现自己在不同的位置上总是得到错误的答案。 另外,如果这很重要,leastChar('blAh')会像预期的那样在位置2返回'A'。在

我认为,最接近正确的方法是,当我把另一个for循环放入初始for循环中,希望我可以增加该变量,以便将“I”与之进行比较,例如:

for i in range(indexLength):
    for j in range(indexLength):
        if lowerString[i] < lowerString[j]:

做点什么,但我没能成功。 谢谢你的帮助。在


Tags: theinforindexifrange字符least
3条回答

如果我正确理解您的问题,您可以在python中使用min

>>> min('yRrcDefxBqubSlyjYelskd')
'B'

然后可以使用index方法:

^{pr2}$

它将返回字符串中char的第一个外观。代码中的问题是,迭代时检查一个字符是否小于下一个字符,如果是,则保存索引,但不检查索引处的字符是否已经更小。在

扩展@melpomene的评论,算法技巧(或者花哨的计算机科学家称之为启发式)是在遍历字符串时跟踪最小位置和最小值。在

def leastChar(inputString):
    # handle cases where inputString is `None` or empty
    if not inputString:
        print('Oh no, inputString is blank!  Run away!')
        return
    lowerString = inputString.lower()
    print(lowerString)
    # use enumerate to keep track of the index as
    # you are iterating over a list
    min_value = lowerString[0]
    min_pos = 1
    for index, ch in enumerate(lowerString, 1):
        # check to see if current char is closer to 
        # front of alphabet than our current minimum
        if ch < min_value:
            # if so, keep track of the current pos/value
            # as the new minimum
            min_pos = index
            min_value = ch
            # pythonic: min_pos, min_value = index, ch
    print("The least char is '{0}' and occurs at position {1}".format(min_value, min_pos))

有不同的方法:

1)不允许使用min、max、index、find、ord、chr或lists? 我会尝试使用rfind()或rindex()。:^)

2)复制字符串并使用sort()查找副本中最小的字符。然后应该使用search()返回这个字符在原始InputString中的位置。在

3)创建一个字母字符串“abcdef….”,并建立一个复杂的while if try except construct来获得结果,但每个人都会讨厌它。:^)

相关问题 更多 >