0
votes

Comment résoudre les indices de chaîne doit être un problème d'entiers dans une boucle pour capitaliser chaque mot dans une chaîne

J'espère que tout le monde est en sécurité.

J'essaie de passer sur une corde et de capitaliser chaque première lettre de la chaîne. Je sais que je peux utiliser .Title () mais

a) Je veux savoir comment utiliser capitaliser ou autre chose dans ce cas - les bases et

b) les chaînes de Les tests, ont des mots avec (') qui rend .Title () confus et capitaliser la lettre après le ('). xxx

Le problème est que l'interprète me donne " TypeError: Les indices de chaîne doivent être des entiers "même que j'ai une entrée entière dans" Word ". Toute aide?

merci!


4 commentaires

Comment mot est un entier? pour mot dans la chaîne selon votre code Word est un seul caractère dans chaîne


C'est une variable et puis je l'ai attribué un entier avec len (string.split ()), non? Désolé, si j'ai mal compris toute la variable, mais nouvelle à CS.


Pouvons-nous voir un exemple de texte et le résultat attendu?


C'est le résultat que j'ai reçu du test: "Comment les miroirs peuvent être réels si nos yeux ne sont pas réels" devrait être égal "Comment les miroirs peuvent être réels si nos yeux ne sont pas réels" quand j'ai utilisé .Title ()


6 Réponses :


1
votes
from re import findall

def capitalize_words(string):
    words = findall(r'\w+[\']*\w+', string)
    for word in words:
        string = string.replace(word, word.capitalize())
    return string

This just grabs all the words in the string, then replaces the words in the original string, the characters inside the [ ] will be included in the word aswell

7 commentaires

Celui-ci fonctionne comme tout comme .title () l'a fait comme cela m'a donné ce résultat pour le test: "Comment les miroirs peuvent être réels si nos yeux ne sont pas réels" devrait être égal "Comment les miroirs peuvent être réels si nos yeux ne sont pas réels"


Je l'ai mis à jour afin que vous puissiez inclure »et tout autre caractère que vous souhaitez dans la chaîne, vous mettez les personnages à l'intérieur de []


Maintenant, après la modification, cela passait le test, merci beaucoup. Cependant, puis-je utiliser une variable pour indexer une liste? J'essaie de coder uniquement les bases sans l'utilisation de bibliothèques car je viens de commencer à coder>.


ahh, bien ce que vous avez fait de mal a été utilisé comme l'index, vous voulez que la boucle soit pour i dans la plage (len (mots)) avec des mots étant mots = string.split ('') puis utilisez i comme l'index


Oh, l'index doit donc être un personnage afin que l'interprète ne voit pas une chaîne réelle?


Si vous voulez être encore plus épreuve d'erreur, la regex R '(\ w + ['] *) * 'permettra de laisser des mots comme vous tous, mais je ne pense pas que vous vouliez apprendre à l'apprentissage de Regex comme un débutant, mais ils sont incroyablement utiles quand vous les apprenez


Non, l'index doit être un nombre, les mots constitueraient une liste comme ["Hello '," World "] pour que vous passez à travers ce mot de liste pour mot, pas besoin de passer par chaque personnage car il suffit de ne pas avoir besoin .Capitaliser ()



1
votes

Vous utilisez l'index de chaîne pour accéder à une autre chaîne Word code> est une chaîne que vous accédez à Word code> à l'aide de chaîne [Word] code> Ceci provoque l'erreur. . XXX PRE>

Solution simple à l'aide de Carte () CODE> P>

def to_jaden_case(string):
    return ' '.join(map(str.capitalize, string.split()))


1 commentaires

Je viens d'utiliser c, comment peut-on indexer une liste avec une variable alors? dis celui utilisé pour la boucle ..



1
votes

look, dans votre code Word est un caractère de chaîne, il n'est pas index, vous ne pouvez donc pas utiliser String [Word], vous pouvez corriger ce problème en modifiant votre boucle ou en utilisant < Strong> mot au lieu de

de sorte que votre code redressé sera le suivant: xxx

ici j'ai changé le troisième Ligne pour mot dans la chaîne avec pour Word in len (string) , la contrepartie vous donne l'index de chaque caractère et vous pouvez les utiliser! Aussi, j'ai supprimé la ligne Split , car il est inutile et que vous pouvez le faire sur une boucle comme len (string)


2 commentaires

Donc, pour que quelque chose soit un indice, il doit être défini que dans le dépôt de l'index de la boucle pour la boucle, non?


Je vous recommande de lire des documentations et des exemples de programmes, pour la plupart des cas, ce problème ne sera même pas considéré comme un problème. Et répondre à votre question, le premier paramètre après pour mot-clé, vous donne une variable, qui est une entité sur la liste de la variable suivante après le mot clé dans , donc dans mon cas la chose La plage (len (chaîne)) vous donnera une liste comme [0,1,2,3 .. Longueur de string] et elle sera substituée et utilisée comme mot variable dans chaque étapes !!



1
votes

Vous avez une erreur logique dans votre code: Vous avez utilisé Word = len (string.split ()) qui est d'aucune utilité, il existe également un problème dans la logique de boucle pour la boucle.

Essayez ceci ci-dessous: P>

def to_jaden_case(string):
    appended_string = ''
    word_list = string.split()
    for i in range(len(word_list)):
        new_word = word_list[i].capitalize()
        appended_string += str(new_word) + " "
    return appended_string


2 commentaires

Pourquoi est-ce quand vous avez utilisé 'i', il n'a pas approprié le TypeError et quand j'ai utilisé le mot, il l'a fait? désolé si sa question idiote. Mille mercis!


pour i dans la plage (len (word_list)) iTère i comme 0,1,2,3 ... jusqu'à sa longueur mais dans votre noeud de cas était une chaîne et non une valeur entière



1
votes

in pour Word in string: code> Word ira déterrer sur les caractères dans string code>. Ce que vous voulez faire, c'est quelque chose comme ceci: xxx pré>

la sortie pour to_jaden_case ("ABC def ghi") code> est maintenant "abcdefghi" code " >, c'est Cammelcase . Je suppose que vous voulez réellement ceci: "abc def ghi" code>. Pour y parvenir, vous devez faire: P>

def to_jaden_case(string):
    appended_string = ''
    splitted_string = string.split()
    for word in splitted_string:
        new_word = word.capitalize()
        appended_string += new_word + " "
    return appended_string[:-1]  # removes the last space. 


0 commentaires

1
votes

Vous faites des choses étranges dans le code.

Tout d'abord, vous divisez la chaîne juste pour compter le nombre de mots, mais ne le stockez pas pour manipuler les mots après cela.

Deuxièmement, lors de l'itération d'une chaîne avec un pour dans , ce que vous obtenez sont les caractères de la chaîne, pas les mots.

J'ai fait un Petit petit extrait pour vous aider à faire ce que vous désirez: xxx

notes:

  • J'ai assigné la valeur de la scission de la chaîne à une variable pour l'utiliser dans la boucle
  • En tant que bonus, j'ai inclus une liste pour vous permettre d'exclure des mots que vous ne voulez pas capitaliser.
  • J'utilise le même tableau original de mots divisés pour construire le résultat ... puis rejoindre en fonction de ce tableau. C'est un moyen de le faire efficacement.
  • En outre, je montrais quelques astuces de python utiles ... d'abord est énumérée (iTable) qui renvoie des tuples (i, j) où i est l'index de position et J est la valeur à cette position. Deuxièmement, j'utilise w [1:] pour obtenir une sous-chaîne du mot actuel qui commence à l'index de caractères 1 et va jusqu'au bout de la chaîne. Ah, ainsi que l'utilisation de paramètres facultatifs dans la liste des arguments de la fonction ... des choses vraiment utiles à apprendre! Si vous ne les connaissez pas déjà. =)

1 commentaires

C'est la meilleure solution sans utiliser de bibliothèque. Merci. Je viens de commencer et j'ai appris à coder avec C où je peux stocker un entier de la longueur de la chaîne de cette façon, je ne savais pas que cela a provoqué une erreur logique dans Python. Merci beaucoup.