#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
в awhile
?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)
Может ли это помочь, если он проголосует за мой ответ