Étant donné une chaîne de caractères arbitraire, je suis censé trouver la somme de tous les chiffres de cette chaîne. Cela nécessite évidemment que je connaisse le PROCHAIN élément de la chaîne tout en l'itérant... et que je décide si c'est un entier. Si l'élément précédent était aussi un entier, les deux éléments forment un nouvel entier, tous les autres caractères sont ignorés et ainsi de suite.
Par exemple, une chaîne d'entrée
ab123r.t5689yhu8
devrait aboutir à la somme de 123 + 5689 + 8 = 5820
.
Tout cela doit être fait sans utiliser d'expressions régulières.
J'ai implémenté un itérateur en python, dont la méthode (next()) renvoie l'élément suivant, mais en passant la chaîne de caractères d'entrée.
acdre2345ty
J'obtiens le résultat suivant
a
c
d
r
e
2
4
t
y
Certains chiffres 3 et 5 sont manquants... pourquoi ? J'ai besoin que le next()
pour que je puisse passer en revue une chaîne d'entrée et effectuer les calculs correctement.
Mieux encore, comment dois-je implémenter la méthode next pour qu'elle donne l'élément situé immédiatement à droite lors d'une itération donnée ?
Voici mon code
class Inputiterator(object):
'''
a simple iterator to yield all elements from a given
string successively from a given input string
'''
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def next(self):
"""
check whether we've reached the end of the input
string, if not continue returning the current value
"""
if self.index == len(self.data)-1:
raise StopIteration
self.index = self.index + 1
return self.data[self.index]
# Create a method to get the input from the user
# simply return a string
def get_input_as_string():
input=raw_input("Please enter an arbitrary string of numbers")
return input
def sort_by_type():
maininput= Inputiterator(get_input_as_string())
list=[]
s=""
for char in maininput:
if str(char).isalpha():
print ""+ str(char)
elif str(char).isdigit() and str(maininput.next()).isdigit():
print ""+ str(char)
sort_by_type()