1.输入一个字符串,取出这个字符串中所有的数字并求和。每个数字都是*独立的,*不连续。
现在只知道如何提取字符串中的数字
例:s=‘Abc34g8’
for I in s:
I.isdigit()
或者 for I in s
if I in [1,2,3,4,5,6,7,8,9]
但是如何让提取出来的数字按照要求相加呢? 按照这种方法结果应是:15
2.输入一个字符串,取出这个字符串中所有的数字并求和。其中相邻的数字是*连续*的的。 按照这种方法结果应是:42
问如何求和?
cloudyzhao所说方案实现简单有效,此处列一个基础的写法,不依赖正则库
s = "Abc34g8"
result = 0
i = 0
while i < len(s):
tmp_num = 0
while i < len(i) and s[i] >= '0' and s[i] <= '9':
tmp_num = tmp_num*10 + int(s[i])
i += 1
i+= 1
result += tmp_num
print(result)
用正则表达式提取单个数字
1楼的正则表达式比较高阶,2楼的基础算法也可以说是非常漂亮!
对我启发很大。
所以我也想给出一个较为反面的算法(很低级,不巧妙),但结果
当然是对的。这样可以一窥算法的优劣,容易知道从哪里提高自身水平。
print('-'*20,'第二题,字符串中整数,相邻数字为连续整数','-'*20,'\n')
s=input('输入一个带有数字和字母的字符串:\n')
# 将所有是数字的对应索引提取出来作为list,为的是后续通过索引判断是否为连续数字,并且输出元素。
list_index=[]
list_new=[]
sum=0
for i in range(len(s)):
if s[i].isdigit():
list_index.append(i)
# 用两个while循环,外循环获得单个数字输出,内循环通过判断是否为连续,在单个字符追加字符串。
j=0
while j<len(list_index):
num=''
num=num+s[list_index[j]]
while j<len(list_index)-1 and list_index[j+1]-list_index[j] == 1:
num=num+s[list_index[j+1]]
j +=1
num=int(num)
list_new.append(num)
j +=1
#输出连续整数list的所有元素,以及他们的和。
for m in list_new :
sum=sum+m
print('\n字符串中连续的整数有:\n',list_new)
print(f'他们的和为:'+'\n'+f'{sum}')
在下也是新手,希望能跟朋友们一起提高!
string = "1234567"
for i in range(len(string)):
total += int(string[i])