Подсчет количества определенных символов в строке с одним циклом while и одним циклом for в python

#python #for-loop #while-loop

Вопрос:

Мне был задан вопрос со случайной строкой, такой как

 example = ‘asdkfkebansmvajandnrnndklqjjsustjwnwn’
 

и меня попросили найти количество букв а в этой строке с помощью while и с помощью цикла for

Поэтому простое использование функции count (), подобной этой, не допускается:

 print('# of a:’, example.count(‘a’))
 

Нам был приведен один пример: (и нам сказали найти другой способ)

 counter = 0
for letter in example:
   if letter == ‘a’:
        counter = counter   1
print(counter)
 

Я очень новичок в python и действительно не могу найти способ. Я подумал о преобразовании этой строки в список, который содержит каждый символ как отдельный объект, подобный этому:

 example_list = list(example)
 

но тогда я все еще не мог найти способ.

Нам дали две отправные точки, поэтому конечный код должен быть в несколько похожем формате, и нам на самом деле не разрешается использовать более продвинутые функции (насколько я знаю, разрешены простые строковые или списковые функции и операторы if).

Для цикла «время»:

 counter = 0
while counter < 4:
    print(example_list[counter])
    counter  = 1
 

И для for-петли:

 for counter in range(0, len(example_list)):
    print(counter, example[counter])
 

Я либо печатаю каждый отдельный символ с его позицией, либо печатаю число без фактического использования цикла.

Комментарии:

1. Значит, вам нужно использовать a на некоторое время? Вы можете сделать это с помощью одного «для»…

2. можете ли вы просто переписать функционирование for в a while ?

3. sum(1 for x in string[start:end] if x == "a")

4. @Mahrkeenerh Мне разрешено это делать, но я не мог понять, как это сделать, потому что я не уверен, как определить «букву» с помощью while

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

Ответ №1:

Я думаю, что советы говорят вам, что вы должны перебирать массив с помощью счетчика. Вот пример для цикла while:

 example = 'asdkfkebansmvajandnrnndklqjjsustjwnwn'
counter = 0
a_count = 0
while counter < len(example):
    if example[counter] == 'a':
        a_count  = 1
    counter  = 1
print(a_count)
 

И для for-цикла это может выглядеть так:

 for counter in range(len(example)):
    if example[counter] == 'a':
        a_count  = 1
 

Ответ №2:

Обратите внимание, что преобразование в список не требуется, так как вы можете выполнять итерацию по строке точно так же, как вы выполняли бы итерацию по строке, преобразованной в список.

Для вашей первой отправной точки, я думаю, идея состоит в том, чтобы выполнить итерацию по индексу:

 index = 0
counter = 0
while index < len(example):
    if example[index] == 'a':
        counter  = 1
    index  = 1
 

И версия для цикла будет:

 counter = 0
for index in range(len(example)):
    if example[index] == 'a':
        counter  = 1
 

Примечание: итерация по индексу, подобная этой, на самом деле считается плохой практикой в Python (потому что это в основном просто добавление ненужной работы), и предпочтительным методом является итерация по значению, как в примере, который вам дали, а затем сказали не использовать.

Ответ №3:

Две функции, while_count и for_count , чтобы достичь того, что вам нужно:

 def while_count(s):
    counter, i = 0, 0
    while i < len(s):
        if s[i] == "a":
            counter  = 1
        i  = 1
    return counter


def for_count(s):
    counter = 0
    for i in range(len(s)):
        if s[i] == "a":
            counter  = 1
    return counter
 

Вы можете for значительно упростить дело, используя понимание списка:

 def for_count2(s):
    return sum([x=="a" for x in s])
 

Ответ №4:

Вот решение вашего вопроса

1.Использование для цикла

 example = 'asdkfkebansmvajandnrnndklqjjsustjwnwn'
count=0
for i in example:
    if i.lower()=='a':
        count =1
print(count)
 

2. Использование цикла While:

 example = 'asdkfkebansmvajandnrnndklqjjsustjwnwn'
loop_count=0
a_counter=0
lis=list(example)
while loop_count<len(example):
    if lis[loop_count]=='a':
        a_counter =1
    loop_count =1
print(a_counter)
 

Может ли это помочь, если он проголосует за мой ответ