gpt4 book ai didi

Python 迭代器行为

转载 作者:行者123 更新时间:2023-11-28 19:35:55 26 4
gpt4 key购买 nike

给定一个任意输入字符串,我打算找到该字符串中所有数字的总和。这显然要求我在遍历字符串时知道字符串中的 NEXT 元素......并决定它是否是整数。如果前一个元素也是一个整数,则这两个元素形成一个新的整数,所有其他字符将被忽略,依此类推。

例如一个输入字符串

ab123r.t5689yhu8 

应该得到 123 + 5689 + 8 = 5820 的总和。

所有这些都是在不使用正则表达式的情况下完成的。

我已经在 python 中实现了一个迭代器,我认为它的 (next()) 方法返回下一个元素,但传递了输入字符串

acdre2345ty 

我得到以下输出

a
c
d
r
e
2
4
t
y

有些数字 3 和 5 不见了...这是为什么?我需要 next() 为我工作,以便能够筛选输入字符串并正确进行计算

更好的是,我应该如何实现 next 方法,以便它在给定的迭代过程中产生紧邻右侧的元素?

这是我的代码

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()

最佳答案

Python 字符串已经是可迭代的,无需创建您自己的迭代器。

因此,无需迭代器即可轻松实现您想要的:

s = "acdre2345ty2390"

total = 0
num = 0

for c in s:
if c.isdigit():
num = num * 10 + int(c)
else:
total += num
num = 0

total += num

结果是:

>>> print total
4735

关于Python 迭代器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com