2012-03-26 18 views
1

Ich bin sehr neu in Python und habe Probleme mit dem folgenden Bit Code. Ziel ist es, eine Funktion zu erstellen, die alle Ganzzahlen innerhalb einer Zeichenkette ausgibt.Finden von Ziffern in einer Zeichenfolge

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

Allerdings ist es Rückkehr nur die erste ganze Zahl in der Zeichenfolge, und ich bin nicht sicher, wie man es zu bekommen, sie alle zu drucken.

Ich entschuldige mich, wenn die Frage dumm ist, habe ich mich eine Weile auf dieser Seite und anderen umgesehen und habe es nicht geschafft, es auszuarbeiten.

Antwort

1

können Sie eine Schleife durch die Ziffern und eine Liste von ihnen, wie folgt aus:

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 druckt Dinge. return sendet die Antwort zurück zu dem, was die Funktion ausgeführt hat. Ich nehme an, Sie verwirren die beiden, denn wenn Sie eine Funktion in Python ausführen, druckt es, was zurückgegeben wird. Aber das liegt nur daran, dass Python versucht, hilfreich zu sein und Ihnen das Ergebnis zu zeigen; Es ist nicht so, wie man normalerweise Dinge druckt.

, wenn Sie wirklich die Ziffern wollen zurückkehren, und sie an anderer Stelle drucken, dann einen Weg, es zu tun ist, um eine Liste der Ergebnisse bauen:

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

Ihre Funktion wird beendet, nachdem es die erste Stelle findet. Um alle Ziffern zurückzugeben, sammeln Sie die Ergebnisse in einer Liste.

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

Sie können auch Ihre Funktion vereinfachen, indem ein list comprehension mit:

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

Wenn Sie nur die Ergebnisse drucken möchten, und nicht sie zurück, ersetzen return i mit print i in Ihrer ursprünglichen Funktion.

2

Wenn Sie von einer Funktion zurückkehren, wird die Ausführung der Funktion gestoppt. Ich würde hier eine generator empfehlen, die es Ihnen ermöglicht, eine iterable von einer Funktion zurückzugeben, ohne viel Code zu schreiben.

Diese Frage klingt nach Hausaufgaben, also werde ich nicht die volle Antwort geben, aber ich würde empfehlen, this StackOverflow answer für eine großartige Erklärung der Generatoren und der yield Stichwort.

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

versuchen Sie es so. Weil du zurückkehrst, während du das erste digitale findest.

+1

Dies gilt nicht, Python (die '' & Operator nicht auf Strings benutzt werden kann) und die Formatierung ist ... suboptimal. –

0

Einfache Erklärung:

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

, wenn eine Funktion return i trifft, stoppt er die weitere Ausführung und den Wert zurück.


Da andere im Detail erläutert wird, werde ich mehr Lösungen als Referenz gerade auf:

#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

Kondensmilch in eine Liste Verständnis

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

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

Returns

['4', '3', '2', '5'] 
4325 
Verwandte Themen