Écrivez une fonction appelée stop_at_z qui itère dans une liste de chaînes. En utilisant une boucle while, ajoutez chaque chaîne à une nouvelle liste jusqu'à ce que la chaîne qui s'affiche soit «z». La fonction doit renvoyer la nouvelle liste.
def stop_at_z(str): d = 0 x=[] str1 = list(str) while True : if str1[d] != 'Z' : x.append(str1[d]) d+=1 if str1[d] == 'Z' : break return x
En utilisant une boucle while, ajoutez chaque chaîne à une nouvelle liste jusqu'à ce que la chaîne qui s'affiche soit «z». La fonction doit renvoyer la nouvelle liste.
6 Réponses :
Que faire si la chaîne «z» n'est jamais dans la liste?
Ensuite, il continue d'augmenter l'index et finit par générer une erreur.
Est-ce la façon dont vous le faites, la recherche de «z» est sensible à la casse, essayez quelque chose comme:
If str1[d].strip().lower() == âzâ
Il supprime les espaces blancs de début et de fin, puis convertit l'élément str1 en minuscules (les deux renvoient simplement la chaîne modifiée, de sorte que l'original reste inchangé) et le compare à un z minuscule
le problème a spécifié un petit 'z'
Dans le code que vous avez publié, il semble que vous le compariez à un grand «Z». Regardez également le code dans la réponse de glhr pour voir comment gérer le cas où «z» n'apparaît pas (juste au cas où)
Notez que str1[d].strip().lower() == "z"
correspondra à la fois aux minuscules et aux majuscules z
.
Vous obtenez cette erreur car d
continue d'augmenter à l'infini s'il n'y a pas de «Z» majuscule dans la chaîne. Au lieu de cela, vous ne devriez rester dans le while
en boucle pendant toute la longueur de la chaîne d'entrée n'a pas été atteint:
['h', 'e', 'l', 'l', 'o', ' ', 'w']
Notez que vous pouvez réaliser la même chose en utilisant takewhile()
depuis le module itertools
:
from itertools import takewhile def stop_at_z(inputstr): return list(takewhile(lambda i: i != 'z', inputstr)) print(stop_at_z("hello wzrld"))
Production:
def stop_at_z(inputstr): d = 0 x=[] str1 = list(inputstr) while d<len(inputstr) : if str1[d] == 'z' : break else: x.append(str1[d]) d+=1 return x
Restreindre simplement la boucle à la longueur de la liste devrait aider.
def stop_at_z(str): d = 0 x=[] str1 = list(str) for d in range(0,len(str1)) : print(d) if str1[d] != 'Z' : x.append(str1[d]) else: break return x
Fondamentalement, nous devions avoir une liste qui pourrait avoir tous les caractères jusqu'à ce que nous obtenions "z". Une façon de le faire est de convertir d'abord la chaîne en une liste, d'itérer cette liste et d'ajouter chaque caractère à une nouvelle liste ls
jusqu'à ce que nous obtenions "z". Mais le problème est que nous pouvons obtenir une chaîne qui n'a pas "z", nous devons donc itérer jusqu'à la longueur de cette liste. J'espère que c'est clair.
def stop_at_z(s): ls = [] idx = 0 x = list(s) while idx<len(x): if x[idx]=="z": break ls.append(x[idx]) idx+=1 return ls
explique plus :)
C'est la première fois que je poste ici, mais j'utilise cette boucle while:
def stop_at_z(input_list): print (input_list) output_list=[] index=0 while index< len(input_list): if input_list[index] != "z": output_list.append(input_list[index]) index+=1 else: break return output_list
Vous êtes-vous demandé ce qui se passerait si la chaîne «z» ne faisait pas réellement partie de la liste des chaînes?
De plus,
str
est le nom de la classe de chaînes en Python. Vous ne devriez pas l'utiliser comme nom de variable.Et encore une chose, vous devez vérifier si la chaîne est en minuscule 'z' ou pas trop pour l'exhaustivité
J'ai essayé de changer le nom du paramètre et de vérifier si la chaîne contient un `` z '' minuscule et cela ne fonctionne pas
Vous devriez vérifier les majuscules et les minuscules. Et restez dans la taille de la liste. Et retourne quelque chose comme -1 si la liste ne contient pas z