简体   繁体   中英

How do I use for loops with functions for string input in python?

I'm having trouble with creating a function that takes an argument of a string and returns just the numbers in type str . My code looks something like this.:

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='')

It should print: 1655

You should add each char to a string if it is a digit :

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

Note that you can also use the re library :

import re
re.sub("\D", "", "1655t")

#1655

This code replace every non-digit character (matched by \\D ) by an empty string.

Have a look at this question to find more way to do it

You can do this :

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

This function will return 1655, if the input is 1655t. You return from the function once you scan the complete string and append all ints to a string.

Assuming all numbers are together (ie No letters exist between digits like "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='')

This will return a string that only has digits in it. If you want to return a type int , then simply do return int(num) .

If you want to take floats into account as well:

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='')

Similarly, this will return a string. If you want type float , simply do return float(num) .

I tried not to deviate too much from what you already had... I hope this helps.

The easy way would be just using filter and concatenating the filtered letters in the end:

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

I'm uncertain what check_leap_year() function is so I just commented it out and called the function you gave us instead.

When you pass anything into a function in order to manipulate it and spit it back out different than it came in you should create a new variable for the changed data set.

In this case I used num = ""

By initiating an empty string inside of the function I can now add the data that pass my condition to that new, empty string.

isdigit() returns a boolean. So instead of using if x.isdigit: get in the habit of checking the boolean. Try if x.isdigit() is True instead.

Return your finished new string AFTER it is finished. Make sure your return statement is indented correctly or you are only going to return one number instead of all of them. The return should be outside of the loop so that it will only return once the loop is done.

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

Output:

>>> 1234566677788890

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM