2012-03-26 3 views
1

Я очень новичок в python, и у меня возникают проблемы со следующим битом кода. Цель состоит в том, чтобы создать функцию, которая печатает все целые числа внутри строки.Поиск цифр в строке

def get_digits(str1): 
    for i in str1: 
     if i.isdigit(): 
     return i 

Однако это возвращает только первое целое число в строку, и я не уверен, о том, как заставить его печатать все из них.

Приносим извинения, если вопрос глуп, я некоторое время искал на этом сайте и других и не смог его обработать.

ответ

1

Вы можете перебрать цифры и возвращает список из них, как это:

def get_digits(str1): 
    digits = [] # define new list 
    for i in str1: 
     if i.isdigit(): 
     digitis.append(i) # i is a digit, append to list 
    return digits # return the list of digits 
2
>>> def print_digits(str1): 
... for i in str1: 
...  if i.isdigit(): 
...   print i 
... 
>>> print_digits("a12b3") 
1 
2 
3 

print печатает вещи. return отправляет ответ обратно на все выполняемые функции. я думаю, вы сбиваете с толку два, потому что, если вы запускаете функцию внутри python, она печатает все, что возвращается. но это только потому, что python пытается быть полезным и показывать результат; это не то, как вы обычно печатаете вещи.

, если вы действительно хотите вернуть цифры, и распечатать их в другом месте, то один из способов сделать это является создание списка результатов:

>>> def get_digits(str1): 
... results = [] 
... for i in str1: 
...  if i.isdigit(): 
...   results.append(i) 
... return results 
... 
>>> print(get_digits("a12b3")) 
['1', '2', '3'] 
0
def get_digits(str1): 
    numbers = "" 
    for i in str1: 
     if i.isdigit(): 
     numbers = numbers + i 
    return numbers 
1

Ваша функция завершает работу после того, как он находит первую цифру. Чтобы вернуть все цифры, запишите результаты в список.

def get_digits(str1): 
    digits = [] 
    for i in str1: 
     if i.isdigit(): 
     digits.append(i) 
    return digits 

Вы также можете упростить функцию, с помощью list comprehension:

def get_digits(str1): 
    return [d for d in str1 if d.isdigit()] 

Если вы просто хотите, чтобы распечатать результаты и не вернуть их, заменить return i с print i в исходной функции.

2

Всякий раз, когда вы возвращаетесь от функции, функция прекращает выполнение. Я бы порекомендовал здесь generator, который позволяет вам возвращать итерабельность из функции, не записывая много кода.

Этот вопрос курит домашнюю работу, поэтому я не буду давать полный ответ, но я бы рекомендовал посмотреть на this StackOverflow answer для отличного объяснения генераторов и ключевого слова yield.

-3
a="" 
def get_digits(str1): 
    for i in str1: 
     if i.isdigit(): 
     a=a&i 
    return a 

попробуйте его вот так. Потому что вы вернетесь, когда найдете первый цифровой.

+1

Это не действительный Python ('' & оператор не может быть использован на строках) и форматирование ... неоптимальным. –

0

Простое объяснение:

# your code 
def get_digits(str1): 
    for i in str1: 
     if i.isdigit(): 
     return i 

когда функция встречает return i, она прекращает дальнейшее выполнение, и возвращает значение.


Поскольку другие объяснил подробно, я просто положить больше решений для справки:

#1. Using generator 
def get_digits_generator(str1): 
    for i in str1: 
     if i.isdigit(): 
      yield i 

#2. Returning a list of digits 
def get_digits_list(str1): 
    list_of_digits = [] 
    for i in str1: 
     if i.isdigit(): 
      list_of_digits.append(i) 
    return list_of_digits 

#3. List comprehension 
str1 = "asdbh12njasdo29ns" 
list_of_digits = [character for character in str1 if character.isdigit()] 
3

конденсируются в список понимания

def get_digits(strval): 
    return [i for i in strval if i.isdigit()] 

print get_digits('432jfsd5fs') 
print ''.join(get_digits('432jfsd5fs')) 

Возвращает

['4', '3', '2', '5'] 
4325 
Смежные вопросы