J'ai une simple boucle for itérant à travers une chaîne d'entrée utilisateur. S'il rencontre une certaine valeur, je veux pouvoir regarder vers l'avant la valeur suivante afin de déterminer ce qu'il faut faire ensuite. Quelle est la meilleure façon d'y parvenir? Par exemple, dans mon code ci-dessous, s'il rencontre un "1" dans la chaîne, il devrait regarder le caractère suivant dans la chaîne. S'il s'agit également d'un 1, imprimez 1. Sinon, ne faites rien.
UserInput = input("Enter calculator expression:")
for x in UserInput:
...
...
if x == 1:
# if the next value in the string is 1:
# print 1
# else:
# do nothing
7 Réponses :
Utilisez range et len dans la boucle pour obtenir l'adresse de position
UserInput = input("Enter calculator expression")
for i in range(len(UserInput)-1):
if x[i]=='1':
if x[i+1]=='1':
print "something"
else:
pass
Vous pouvez compresser une chaîne avec elle-même, mais décalée avec une tranche.
>>> from itertools import zip_longest >>> the_input = 'foobar' # example >>> the_input[1:] # slice off the first character 'oobar' >>> for c, lookahead in zip_longest(the_input, the_input[1:]): ... print(c, lookahead) ... f o o o o b b a a r r None
C'est plus pythonique que d'utiliser un index comme vous le feriez dans un langage comme C. La fermeture éclair associe les éléments par élément, comme les dents d'une fermeture à glissière.
la lisibilité compte aussi. On dirait que l'utilisateur qui a publié ceci est un débutant. Vous devez fournir une solution au niveau novice.
«Facile» n'est pas la même chose que «familier». «Niveau novice» ne signifie pas «le plus semblable au C» (c'est-à-dire unpythonic). Jouer avec les index est très sujet aux erreurs, et pas du tout ce que je recommanderais aux débutants. Le zipping est plus fiable, et donc "plus facile" à faire correctement.
Laissez-les faire des erreurs. Ensuite, ils chercheront des solutions plus fiables et apprendront de leurs erreurs. C'est la courbe d'apprentissage. Si vous les bombardez avec itertools, zip_longest, array slicing tous en même temps, ils seront bientôt découragés. Laissez-les prendre du temps et apprendre
Plus que de simples débutants lisent ces réponses. Chaque introduction à Python pour débutant que j'ai vue couvre déjà le découpage. itertools est l'endroit où j'ai importé zip_longest () , et il est trivial de comprendre si vous avez déjà utilisé le zip () intégré. Alors vraiment, je les "bombarde" avec une chose. Peut-être une demi-chose s'ils ont déjà touché zip () , qui n'est pas plus obscur que le intégré enumerate () que j'ai vu dans l'autre réponse.
Eh bien, vous semblez définitivement avoir effrayé la personne, je ne trouve même pas un seul commentaire de sa part. Eh bien j'espère que tu es heureux maintenant
Vous pouvez utiliser la fonction enumerate (). quelque chose comme ça,
#!/user/bin/python3
for i,x in enumerate(UserInput):
if x=='1':
if UserInput[i+1] == '1':
print('1')
Premièrement, la convention python est snake-case (user_input à la place)
le code ci-dessous est ma solution
from itertools import islice
def window(seq, n=2):
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
pair = list(window(user_input))
comparison_list = ["1"]
result = [x for x,y in pair if x in comparison_list and x == y]
Vous n'avez pas besoin de regarder vers l'avenir. Au moins, ce n'est pas ce que nous faisons habituellement lorsque nous nous attaquons à ce genre de problème. Au lieu de cela, vous devriez regarder en arrière - en stockant les informations. L'exemple suivant stocke les informations dans une variable state et vous pouvez décider de l'action suivante dans l'itération suivante.
UserInput = input("Enter calculator expression:")
state = '0'
for x in UserInput:
if x == '1':
if state == '1':
print('1')
else:
state = '1'
else:
state = '0'
Une manière différente (probablement plus pythonique) de faire cela avec le zip fonction: for char, next_char in zip(UserInput, UserInput[1:]):
if char == "1" and char == next_char:
print(1)
prev_char = None
for char in input("Enter calculator expression:"):
pass # Here you can check the current character and the previous character
if 1 == prev_char and 1 == char:
print(1)
prev_char = char