0
votes

pourquoi cela me montre-t-il dans le résultat (index de la liste hors de portée)?

É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.


5 commentaires

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


6 Réponses :


0
votes

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.


0 commentaires

0
votes

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


3 commentaires

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 .



1
votes

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 


0 commentaires

0
votes

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 


0 commentaires

0
votes

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


1 commentaires

explique plus :)



0
votes

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


0 commentaires