2017-02-08 1 views
0

Ich habe Probleme mit dem Erstellen einer Funktion, die ein Argument einer Zeichenfolge und nur die Zahlen in Typ str zurückgibt. Mein Code sieht ungefähr so ​​aus .:Wie verwende ich for-Schleifen mit Funktionen für die Eingabe von Zeichenfolgen in Python?

def check_if_number(number_string): 
    for ch in number_string: 
     if ch.isdigit(): 
      num = number_string[ch] 
      return num 
print(check_if_number('1655t'), end='') 

Es gedruckt werden soll: 1655

+0

Was ist 'check_leap_year' Funktion? Außerdem, welchen genauen Fehler bekommst du? – Jarvis

+0

ist es check_if_number. Entschuldigung für die Verwirrung. Ich bekomme TypeError: String-Indizes müssen ganze Zahlen sein. Wenn ich den Code – KBdoesCode

+0

ausführen nicht innerhalb der FOR-Schleife zurückkehren, am Ende zurückkehren. Sie müssen auch eine Ergebnisvariable hinzufügen, da 'num' nur ein einzelnes Zeichen ist,' ch' ist immer noch eine Zeichenkette, die Sie nach der Überprüfung in ein 'int' konvertieren müssen, da Sie nicht damit indizieren können. Versuchen Sie, alle nicht-einstelligen Zeichen zu entfernen oder nur zu prüfen, ob die Ziffer nicht nur Ziffern ist? –

Antwort

0

Sie dies tun können:

def check_if_number(number_string): 
    num = "" 
    for ix in number_string : 
     if ix.isdigit(): 
      num += ix 
    return int(num) 

Diese Funktion 1655 zurückkehren wird, wenn der Eingang 1655t ist. Sie kehren von der Funktion zurück, nachdem Sie die vollständige Zeichenfolge gescannt und alle ints an eine Zeichenfolge angefügt haben.

+0

Warum durchlaufen Sie einen Bereich, wenn Sie nur auf das Element zugreifen können? Iteriere direkt über die Saite! –

+0

kann ich nicht einfach ch.isdigit() verwenden: oder muss es den number_string [ch] enthalten? Auch das visuelle hilft viel dank! Ich bin neu in Python. – KBdoesCode

+0

Und dann nennst du den Index 'ch', der wie die Hölle verwirrend ist. Das ist furchtbar verwirrend für jemanden, der eindeutig ein Anfänger ist. –

1

Sie sollten jedes Zeichen in einen String hinzufügen, wenn es sich um eine Ziffer ist:

def check_if_number(number_string): 
    digit_string = "" 
    for ch in number_string: 
     if ch.isdigit(): 
      digit_string += ch 
    return digit_string 
print(check_if_number('1655t')) 

# 1655 

Beachten Sie, dass Sie auch die re library verwenden können:

jede nicht-stellige Zeichen ersetzen
import re 
re.sub("\D", "", "1655t") 

#1655 

Dieser Code (gepaart mit \D) durch eine leere Zeichenfolge.

Werfen Sie einen Blick auf this question mehr Weg zu finden, es

+0

Ich sehe die zwei Dinge, die ich falsch gemacht habe. Keine Ergebnisvariable wie digit_string zum Hinzufügen und Platzieren der Rückgabe außerhalb der Schleife. Das öffnet meine Augen. – KBdoesCode

+0

@KBdoesCode Großartig! Wenn dies Ihr Problem löst und Ihre Frage beantwortet, können Sie die Antwort akzeptieren (das Häkchen-Symbol auf der linken Seite der Frage). – Fabich

0

Unter der Annahme, alle Zahlen sind zusammen zu tun (dh keine Buchstaben bestehen zwischen den Ziffern wie „1e234g7“),

def check_if_number(number_string): 
    num = '' 
    for ch in number_string: 
     if ch.isdigit(): 
      num += ch 
    return num 

print(check_if_number('1655t'), end='') 

Dies wird eine Zeichenfolge zurück das hat nur Ziffern drin. Wenn Sie einen Typ int zurückgeben möchten, tun Sie einfach return int(num).

Wenn Sie schwimmt berücksichtigen als auch:

def check_if_number(number_string): 
    num = '' 
    for ch in number_string: 
     if ch == '.' or ch.isdigit(): 
      num += ch 
    return num 

print(check_if_number('1655t'), end='') 

Ebenso gibt diese eine Zeichenfolge. Wenn Sie den Typ float eingeben möchten, tun Sie einfach return float(num).

Ich habe versucht, nicht zu sehr von dem abzuweichen, was Sie bereits hatten ... Ich hoffe, das hilft.

+0

@StevenSummers Ich habe es zuerst nicht verstanden lol Ich habe versucht, den Schnitt so schnell wie möglich zu machen, aber U-Bahnen sind heute hella langsam:/ – spicypumpkin

0

Der einfache Weg wäre nur filter mit und die gefilterten Buchstaben am Ende verketten:

def check_if_number(number_string): 
    return ''.join(filter(str.isdigit, number_string)) 
0

Ich bin unsicher, was check_leap_year() Funktion ist, damit ich es nur kommentiert und rief die Funktion, die Sie uns gegeben haben, statt .

Wenn Sie etwas in eine Funktion übergeben, um sie zu manipulieren und wieder anders auszuspucken als sie kam, sollten Sie eine neue Variable für den geänderten Datensatz erstellen. Ich

In diesem Fall verwenden num = ""

Durch eine leere Zeichenfolge innerhalb der Funktion initiiert ich nun die Daten hinzufügen, die meinen Zustand zu diesem neuen, leeren String.

isdigit() gibt einen booleschen Wert zurück. Anstatt also if x.isdigit: zu verwenden, gewöhnen Sie sich an, den Booleschen Wert zu überprüfen. Versuchen Sie stattdessen if x.isdigit() is True.

Geben Sie die fertige neue Zeichenfolge zurück, nachdem sie fertig ist. Stellen Sie sicher, dass Ihre Rücksendeanweisung korrekt eingerückt ist oder dass Sie nur eine Zahl anstelle von allen zurückgeben. Die Rückkehr sollte außerhalb der Schleife sein, so dass sie erst zurückkehrt, wenn die Schleife beendet ist.

num_string = "1a2s3d4f5g666hhh777jjj888kkk9l0" 
def check_if_number(number_string): 
    num = "" 
    for ch in number_string: 
     if ch.isdigit() is True: 
      num += ch 
    return num 

print(check_if_number(num_string)) 

Ausgang:

>>> 1234566677788890 
+0

Das ist eine Quelle des Wissens. Vielen Dank. Also, was ist der Grund hinter dem Schreiben von ch.isdigit() ist True: Wenn ch.isdigit() funktioniert das gleiche für diese Schleife? Dieser Teil verwirrte mich ein wenig. Mir wurde gesagt, ich solle mich nicht wiederholen, wenn ich Code schreibe. – KBdoesCode

+0

Meist nur Konsistenz und Lesbarkeit. Sie können auch 'isdigit()' verwenden, um festzustellen, ob etwas eine Ziffer ist. In diesem Fall müssten Sie den Operanden "is" verwenden. 'Wenn x.isdigit() ist False:' Eine gute Faustregel ist, wenn Sie es manchmal brauchen, aber wenn Sie es nicht brauchen, gibt es Ihnen die gleichen Ergebnisse, machen Sie es sich zur Gewohnheit. Und wenn Sie jemals Leute haben, die Ihren Code in der Zukunft lesen, werden sie Ihnen danken –

Verwandte Themen