2016-09-10 5 views
1

ユーザーの名前を下に出力するプログラムを作成するのに少し問題があります。これは、各行の最初の文字を削除してから最後の文字が上に来るときです再び。一度に1文字削除する文字列をループする

これは私がこれまで持っているものです。

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

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

は、私はそれが動作すると思います

enter image description here

+1

nafnはどこにでも – Andrew

+2

カウンター自体を表示しません定義されていません。 –

+0

これを試してみましょう: 's = 'Bilbo''それから、' 'i、cを列挙する:print c + s [i + 1:]'それを見たら、残りは簡単です.... – dawg

答えて

1

のように終了することになっているものです:

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 

出力:私は2 halfsに出力を分割

stack 
tack 
ack 
ck 
k 
ck 
ack 
tack 
stack 

上期:スライスを(使用して第一forループによって達成されるであろう

stack 
tack 
ack 
ck 
k 

詳細をご確認くださいExplain Python's slice notation

そして後半:

ck 
ack 
tack 
stack 

注:あなたは私のようまたは第二forループにおける第一forループの中で、この例kでは単一の文字を印刷することができ、それはあなた次第。

これが役に立ちます。

私はあなたが@Andrewによって提案されたソリューションを使用するべきだと思いますが、あなたはシーケンス[0, 1, 2, 3, 4, 3, 2, 1, 0]を得る彼の溶液中でprint aスライスの文字列がそうこれはそのアプローチである単一forループ

+0

ああありがとう、本当に助けてくれてありがとう。このウェブサイトには素晴らしい反応があります。 – Kobbi

0

で行うことができるならば、それはかなりクールです単一のループを使用してスライスして同じ目的を達成します。これは、スライスを開始するインデックスのリストを作成し、その後、そのリストを印刷します。

name = "Bilbo" 

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

for idx in a: 
    print name[idx:] 
+0

'print name [a:] 'の代わりに' print name [idx:] 'を意味すると思います。 –

+0

私はそれを感謝しました。 – Andrew

+0

私はそれがかなりクールだあなたのソリューションが好きです –

0

再帰的な答えは基本的に

、二度同じ文字列を印刷しますが、これらの間のコール機能を再び、しかし取り除か最初の文字を持ちます。開始インデックスが文字列-1の長さより大きい場合、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 
関連する問題