2012-03-26 35 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は、関数を実行したものに答えを返します。私はあなたが2つを混同していると思います。なぜなら、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()] 

あなただけの結果を印刷し、それらを返さない、あなたの本来の機能でprint ireturn iを交換したい場合。

2

関数から戻ると、その関数は実行を停止します。ここではgeneratorをお勧めします。多くのコードを書くことなく、関数からiterableを返すことができます。

この質問には宿題がありますので、私は完全な答えを出すつもりはありませんが、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 
関連する問題