Python 2.7打印vs返回

问题描述 投票:-1回答:4

我正试图从字符串中抓取所有其他字母,但我在打印和返回方面遇到了一些问题。为什么当我使用打印时,输出是我想要的,当我使用返回时我只得到第一个字母?

string_bits(Hello)  # Return string made of every other char starting with the first

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        print str[i]

output: H
        l
        o

VS

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        return str[i]

output: H
python python-2.7
4个回答
1
投票

正如大家所指出的那样,你的函数在第一个循环中返回实例。您可以使用临时变量来存储结果并返回结果。

您可以在函数内使用以下语句:

return ''.join([ur_string[i] for i in range(0, len(ur_string), 2)])

1
投票

也许你想要的是这个:

def string_bits(the_str):
    x = len(the_str)
    for i in range(0,x,2):
        yield the_str[i]

the_str[::2]只采取even位置字符


0
投票

function 1

在这里,你循环遍历整个字符串并打印每个字母。当没有更多字母时,循环结束,并退出该功能。

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        print str[i]

function 2

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        return str[i]

在这里,你循环遍历整个字符串,但不是打印str[i]而是返回它。 return导致函数退出,因此循环不会继续执行其他字母。

希望这可以帮助!


0
投票

这是因为当你return,程序退出函数,而使用print程序继续循环。

由于字符串是可迭代的,您可以通过将步骤指定为2来使用切片来获取所需的字符:

要返回一个字符串:

def string_bits(s):
    return s[::2]

要返回字符列表:

def string_bits(s):    
    return list(s[::2])

或者,您可以使用yield创建生成器:

def string_bits(s):
    for char in s[::2]:
        yield char
© www.soinside.com 2019 - 2024. All rights reserved.