循环打印姓名,每次删除一个字符

2024-04-20 00:05:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在创建一个向下打印用户名的程序时遇到了一点问题,它总是删除每行的第一个字符,然后当它位于最后一个字母时再向上打印。你知道吗

到目前为止,我的情况是:

name = input("Put in a name: ")
name_length = len(name)

for counter in range(name_length,0, -1):    
    print(counter)

下面是它的结局

enter image description here


Tags: namein程序forinputlenput字母
3条回答

这是一种仅使用单个循环和切片来实现相同目的的方法。它创建了一个索引列表,从该索引开始切片,然后逐步打印列表。你知道吗

name = "Bilbo"

a = range(len(name))
a = a[:-1] + a[::-1]

for idx in a:
    print name[idx:]

我认为它会起作用:

name = input("Put in a name: ")
for i in range(len(name)):          # for 1st half
    print(name[i:])
for i in range(len(name)-2,-1,-1):  # for 2nd half
    print(name[i:])

输入:

stack

输出:

stack
tack
ack
ck
k
ck
ack
tack
stack

我把输出分成两半:

上半场:

stack
tack
ack
ck
k

这将通过使用Slice的第一个for循环来实现(检查以了解更多Explain Python's slice notation

下半场:

ck
ack
tack
stack

注意:在本例中,您可以像我一样在第一个for循环或第二个for循环中打印单个字符,具体取决于您。你知道吗

希望这有帮助。你知道吗

虽然我认为你应该使用@Andrew建议的解决方案,但是如果你在他的解决方案中print a得到字符串切片的序列[0, 1, 2, 3, 4, 3, 2, 1, 0],这样就可以在单个for循环中完成

递归回答

从本质上讲,打印同一个字符串两次,但在此期间再次调用函数,但删除第一个字符。当起始索引大于字符串-1的长度时,就剩下一个字符。你知道吗

def printer(str, start=0):
    s = str[start:]
    if len(str) - 1 <= start:
        print s
        return
    print s
    printer(str, start + 1)
    print s

输出

Put in a name: cricket_007
cricket_007
ricket_007
icket_007
cket_007
ket_007
et_007
t_007
_007
007
07
7
07
007
_007
t_007
et_007
ket_007
cket_007
icket_007
ricket_007
cricket_007

相关问题 更多 >