xticks xlabel python

python - xlabel - Número de letras en una cuerda



seaborn (11)

Python newb aquí. Estoy tratando de contar el número de letras "a" en una cadena dada. El código está abajo. Se sigue devolviendo 1 en lugar de 3 en la cadena "banana". Cualquier entrada apreciada.

def count_letters(word, char): count = 0 while count <= len(word): for char in word: if char == word[count]: count += 1 return count print count_letters(''banana'',''a'')


Alternativamente puedes usar:

mystring = ''banana'' number = mystring.count(''a'')


Las otras respuestas muestran lo que está mal con tu código. Pero también hay una forma integrada de hacer esto, si no estuvieras haciendo esto solo para un ejercicio:

>>> ''banana''.count(''a'') 3

Danben dio esta versión corregida:

def count_letters(word, char): count = 0 for c in word: if char == c: count += 1 return count

Aquí hay otras formas de hacerlo, ¡espero que te enseñen más sobre Python!

Similar, pero más corto for bucle. Explota el hecho de que los booleanos pueden convertirse en 1 si es verdadero y 0 si es falso:

def count_letters(word, char): count = 0 for c in word: count += (char == c) return count

La abreviatura de bucles generalmente se puede convertir en una lista / comprensión de generador. Esto crea una lista de enteros correspondientes a cada letra, con 0 si la letra no coincide con char y 1 si lo hace, y luego los suma:

def count_letters(word, char): return sum(char == c for c in word)

El siguiente filtra todos los caracteres que no coinciden con el char , y cuenta cuántos quedan:

def count_letters(word, char): return len([c for c in word if c == char])


Su return está en su bucle for! Tenga cuidado con la sangría, desea que el return count línea esté fuera del bucle. Debido a que el bucle for atraviesa todos los caracteres de la word , el bucle while externo es completamente innecesario.

Una versión limpia:

def count_letters(word, to_find): count = 0 for char in word: if char == to_find: count += 1 return count


Tienes una serie de problemas:

  • Hay un problema con tu sangría como otros ya han señalado.
  • No hay necesidad de tener bucles anidados. Sólo un bucle es suficiente.
  • Está utilizando char para significar dos cosas diferentes, pero la variable char en el bucle for sobrescribirá los datos del parámetro.

Este código corrige todos estos errores:

def count_letters(word, char): count = 0 for c in word: if char == c: count += 1 return count

Una forma mucho más concisa de escribir esto es usar una expresión generadora:

def count_letters(word, char): return sum(char == c for c in word)

O simplemente use la count métodos incorporada que hace esto por usted:

print ''abcbac''.count(''c'')


Un problema es que está utilizando el count para referirse tanto a la posición en la palabra que está verificando, como al número de caracteres que ha visto, y está utilizando char para referirse tanto al carácter de entrada que está verificando como al Carácter en la cadena. Utilice variables separadas en su lugar.

Además, mueva la declaración de return fuera del bucle; De lo contrario siempre volverás después de comprobar el primer carácter.

Finalmente, solo necesitas un bucle para iterar sobre la cadena. Deshazte del bucle while externo y no necesitarás rastrear la posición en la cadena.

Tomando estas sugerencias, su código se vería así:

def count_letters(word, char): count = 0 for c in word: if char == c: count += 1 return count


Una forma sencilla es la siguiente:

def count_letters(word, char): return word.count(char)

O bien, hay otra manera de contar cada elemento directamente:

from collections import Counter Counter(''banana'')

Por supuesto, puede especificar un elemento, por ejemplo,

Counter(''banana'')[''a'']


Veo algunas cosas mal.

  1. Reutiliza el identificador char , por lo que causará problemas.
  2. Usted está diciendo if char == word[count] lugar de word[some index]
  3. ¡Regresas después de la primera iteración del bucle for!

Ni siquiera necesitas el while . Si cambia el nombre del parámetro char para search ,

for char in word: if char == search: count += 1 return count


"banana".count("ana") devuelve 1 en lugar de 2!

Creo que el método recorre la cadena (o la lista) con un paso igual a la longitud de la subcadena para que no vea este tipo de cosas.

Así que si quieres un "conteo completo" tienes que implementar tu propio contador con el bucle correcto del paso 1

Corrígeme si me equivoco...


def count_letter(word, char): count = 0 for char in word: if char == word: count += 1 return count #Your return is inside your for loop r = count_word("banana", "a") print r

3


count_letters="" number=count_letters.count("") print number


x=str(input("insert string")) c=0 for i in x: if ''a'' in i: c=c+1 print(c)