2017-02-05 2 views
-1

Я пытаюсь напечатать «наименьший» символ в строке, где символ меньше, если он ближе к началу алфавита, чем другой символ, и это первая позиция индекса. Я должен использовать только 1 цикл, чтобы определить индекс символа, и мне не разрешено использовать min, max, index, find, ord, chr или lists. Например:Как напечатать «наименьший» символ в строке, используя только один цикл?

leastChar("yRrcDefxBqubSlyjYelskd") 

должен давать:

The least char is 'B' and occurs at position 8. 

В настоящее время у меня есть:

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 

Я пробовал несколько вариантов, но даже usi ng более 1 петли, я нахожу, что получаю последовательно неправильные ответы на разных позициях. Кроме того, в случае, если это имеет значение, lessChar ('blAh') вернет 'A' в позицию 2, как это предполагалось.

Ближайший я пришел к тому, что кажется правильным, мне кажется, когда я положил еще один цикл внутри исходной для петли в надежде, что я мог бы увеличивать эту переменную для сравнения «я» к нему, такие как:

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

И сделайте что-нибудь с этим, но я не смог заставить его работать. Спасибо за помощь.

+0

[«Простейший случай алгоритма выбора - поиск минимального (или максимального) элемента путем итерации по списку, отслеживание минимального рабочего минимума - минимального до сих пор (или максимального)» (https : //en.wikipedia.org/wiki/Selection_algorithm) – melpomene

+0

@melpomene Спасибо за ссылку. – mwierda

ответ

1

Расширение на комментарии @ Мельпомен, в алгоритме трюк (или фантазии компьютерных ученых называют его эвристическим) является следить за как минимального положения и минимальное значение, как вы итерация через строку.

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

Это не эвристика, это алгоритм. – melpomene

+0

Благодарим вас за ответ. Я не очень много смотрел на функцию перечисления, поэтому я обязательно узнаю об этом. – mwierda

-1

вы можете использовать min для этого в Python, если я понимаю вашу проблему правильно

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

, то вы можете использовать index метод:

>>> 'yRrcDefxBqubSlyjYelskd'.index('B') 
8 

который будет возвращать первое появление полукокса в строке , проблема в вашем коде заключается в том, что при повторении вы проверяете, меньше ли символ, чем следующий, тогда вы сохраняете индекс, но не проверяете, меньше ли символ в индексе.

+0

OP «* не разрешено использовать min, max, index, ... *». – melpomene

0

Существуют различные способы:

1) Вы не можете использовать мин, макс, индекс, найти, Ord, CHR, или списки? Я попытался бы работать с rfind() или rindex(). : ^)

2) Скопируйте свою строку и используйте sort(), чтобы найти наименьший символ в вашей копии. Затем вы должны использовать search(), чтобы вернуть позицию этого символа в исходную InputString.

3) Создайте алфавитную строку «abcdef ....» и создайте сложную конструкцию while-if-try-except, чтобы получить результат, но все будут ненавидеть его.: ^)

+1

Ха-ха, я не знаю, какова конструкция try-except (пока), но я думаю, это было бы невероятно весело для меня! – mwierda

Смежные вопросы