我需要使用FOR循环创建一个代码,该代码将查找字符串中的所有数字,然后打印出所有数字。到目前为止,我只能得到代码打印出找到的第一个号码,你可以帮我恳求吗?
这是我的代码:
def allNumbers(string):
for numbers in string:
if numbers.isdigit():
return numbers
程序运行时应该如下所示:
>>> allNumbers("H3llO, H0W 4R3 y0U")
'300430'
>>> allNumbers("Good morning.")
''
''
答案 0 :(得分:4)
整个事情可以用生成器表达式代替:
def allNumbers(string):
return ''.join(x for x in string if x.isdigit())
答案 1 :(得分:1)
不要从函数中返回数字,只需将其插入列表即可。
def allNumbers(string, container=None):
if not container:
container = []
for item in string:
if item.isdigit():
container.append(item)
return container
更好的解决方案:
def allNumbers(orig_str):
return ''.join(filter(orig_str, str.isdigit))
是的,只有在@Daniels回答之后才能想到oneliner是蹩脚的:P
答案 2 :(得分:1)
您可以使用列表。然后将其作为您想要的输出返回。
def allNumbers(string):
l = []
for numbers in string:
if numbers.isdigit():
l.append(numbers)
return ''.join(l)
答案 3 :(得分:1)
如果我没弄错的话,你要求整数,而不是字符串中的每个数字。 如果是这种情况,则会在字符串中显示所有出现的单独整数:
import re
def allNumbers(string):
regex = re.compile(r'\d+')
return regex.findall(string)
例如:
s = "123 sun 321 moon 34"
for num in allNumbers(s):
print num
输出:
123
321
34
N.B。:输出是一个字符串列表。如果需要数字,请将每个元素转换为整数。
如果输入字符串包含浮点数(例如30.21),那么它们的整数和小数部分将被解释为不同的整数(30和21)。
如果没有匹配项,则输出为空列表[]
答案 4 :(得分:1)
#!/usr/bin/python
# -*- coding: utf-8 -*-
s="H3ll0, H0W 4R3 y0U"
result=''
for char in s:
try:
number=int(char)
print number
result=result+char
except:
pass
print 'Result:', result
输出
3
0
0
4
3
0
Result: 300430
答案 5 :(得分:1)
将使用数字>的解决方案9并且不使用正则表达式:
def allnumbers(s):
i = 0
end = len(s)
numbers = []
while i < end:
if s[i].isdigit():
number = ''
while i < end and s[i].isdigit():
number += s[i]
i += 1
numbers.append(int(number))
else:
i += 1
return numbers
答案 6 :(得分:1)
这是另一种方法:
nodejs
输出:
>>> a = 'ad56k34kl56'
>>> x = [i for i in a if i.isdigit()]
>>> ','.join(x)