Le but est de renvoyer la lettre du milieu d'une chaîne, ou " " si la chaîne est paire. Je ne vois pas pourquoi mon code ne fonctionne pas. Toute sorte de clarification serait formidable, merci!
def mid(ml):
x=len(ml)
y=x+1
z=y/2
if isinstance(z,int)==True:
return (ml[z-1])
else:
return (" ")
print (mid("abc"))
3 Réponses :
/ ne retourne pas un int ; même si le nombre qu'il renvoie peut être représenté comme un:
# Read as: "If z is odd", or, "If division of z by 2 has a remainder of 1"
if z % 2 == 1:
return ml[z-1]
else:
return " "
Il serait préférable de vérifier explicitement si le nombre est pair ou non:
>>> 4 / 2 2.0 # A float
Je ne savais pas que "/" renvoie un flotteur! Je l'ai Merci!
En suivant la réponse de @Carcigenicate ci-dessus, vous pouvez essayer le code suivant:
def mid(ml):
x=len(ml)
y=x+1
z=y/2
return (ml[int(z-1)])
print (mid("abc"))
Cela échoue pour mid("abcd") où il devrait renvoyer " "
Cela ne correspond pas aux exigences
Ce problème se produit, car l'opérateur / renvoie un float . Bien que la façon la plus intelligente de résoudre ce problème soit l'utilisation de l' opérateur modulo , si vous voulez vous en tenir à votre code, vous pouvez utiliser la méthode is_integer() de float comme ceci:
def mid(ml):
return ml[len(ml)//2] if len(ml) % 2 else ""
Meilleure façon de le faire:
def mid(ml):
x=len(ml)
y=x+1
z=y/2
if z.is_integer():
return (ml[int(z)-1])
else:
return (" ")
print (mid("abc"))
Votre premier bloc de code déclenche une TypeError car vous utilisez un flottant comme index.
Non, c'est l'opérateur // , qui renvoie un int .
Vous n'utilisez pas // dans votre premier bloc de code.
Vous avez raison à propos du TypeError, j'étais confus car ce n'était pas à l'origine mon code. J'ai déjà corrigé le len(ml) % 2 avant que vous ne commentiez.
Ouais je ne connaissais pas vraiment l'opérateur modulo, merci pour votre aide!