質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

3126閲覧

for文でのスライスについて

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2019/01/15 11:38

編集2019/01/15 11:53

for文で、スライスを用いて、strの文字列から、1回目で先頭のPから最後のSまで10個、2回目で2番目のPから最後のSまで9個、のように取得したいのですが、以下のコードの何が悪いのかがわかりません。ご回答お願いします。
問題点は、paramateの変数を更新したいのも関わらず、更新することができずにいる点です。

#####これでできるのでは?と考えたコード

python3

1str = "PPPPWWWWSS" 2for i in range (2): 3 paramate = 0 4 for i in str[paramate:10]: 5 print(i) 6 paramate += 1

######実行結果
P
P
P
P
W
W
W
W
S
S
P
P
P
P
W
W
W
W
S
S
↑一回目も二回目も、10個の文字を取り出してしまっている。これが問題点。

#####上記のコードでできるのでは??と思った経緯

python3

1str = "PPPPWWWWSS" 2paramate = 0 3for i in str[paramate:10]: 4 print(i)

######実行結果1(paramate=0の時)
P
P
P
P
W
W
W
W
S
S

python3

1str = "PPPPWWWWSS" 2paramate = 1 3for i in str[paramate:10]: 4 print(i)

#####実行結果2(paramate=1の時)
P
P
P
W
W
W
W
S
S

下の二つのコードでは、paramateの値が更新可能であるため、一番上のコードでもこれが可能であると考えています。
何が問題なのでしょうか???ご指摘お願いします。

#####LouiS0616さんのアドバイスによる変更点
ご指摘に従ってparamateをループの外に出してみました。しかし、意図した動きになりません、、ここに何を足せば良いのでしょうか??

python3

1str = "PPPPWWWWSS" 2paramate = 0 3for i in range (2): 4 for i in str[paramate:10]: 5 print(i) 6 paramate += 1

#####実行結果
P
P
P
P
W
W
W
W
S
S
↑一回目のループしかできていない?状態っぽいのですが、、

YouheiSakurai👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YouheiSakurai

2019/01/15 12:30

おめでとうございます。解決に至ってよかったですね。あと、今後のためにあえて一つ書きます。「実行結果(現状の上手くいかない結果)」に「期待する結果(本当ならこうなってほしいという結果)」を併記すると、人にもっと伝わりやすくなりますし、自分の思考の整理にもなりますので、そこをオススメしたいです。実行した結果と期待する結果を適切に説明・記述できるか否かは職業人として本当に大きな分かれ目になると私は考えています。
退会済みユーザー

退会済みユーザー

2019/01/15 12:37

@YouheiSakuraiさん、貴重な指摘をありがとうございます。 自分も昨日の質問内容を見返し、相手に伝わりにくいという点で良くなかったと反省しました。現在、学生でプログラマを目指しているので、今回のSakuraiさんの指摘は肝に命じて生きていこうと思います。今後もterateilを積極的に使っていこうと思っています。自分の動向を温かく見守っていただき、ありがとうございました。
guest

回答3

0

ベストアンサー

こういうことです?

Python

1src = "PPPPWWWWSS" 2 3for i in range (2): 4 print('-' * 20) 5 6 for j in src[i:]: 7 print(j)

実行結果 Wandbox

-------------------- P P P P W W W W S S -------------------- P P P W W W W S S

paramateの値が更新可能であるため、一番上のコードでもこれが可能であると考えています。paramateの値が更新可能であるため、一番上のコードでもこれが可能であると考えています。

『上のコード』では paramate = 0 をループ内に置いているのが問題です。

投稿2019/01/15 11:42

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/15 11:55 編集

昨日に引き続き、お世話になっております。早いレスポンスありがとうございます。 アドバイスに従って、paramateeをループの外に出したものを編集して載せました。 しかし、今度は1回目のループの結果のみ表示されるようになってしまい、2回目の繰り返しが存在しません。どう変更したら良いでしょうか??
LouiS0616

2019/01/15 12:10

paramate += 1 の階層を一つ浅く、つまりは外側のループの要素とすべきでは。
退会済みユーザー

退会済みユーザー

2019/01/15 12:38 編集

うわ!!!!できました!!! ありがとうございます!!! いつもいつも、素早く対応していただいて本当にありがとうございます。 これからは相手にわかりやすく、質問内容を明確にして生きたいと思います。 ありがとうございました。
LouiS0616

2019/01/15 12:57

今回の質問は、どのような実行結果を期待しているかはっきりしていたので回答しやすかったですね。 ・大目的 ・小目的 ・期待する入出力 ・現状のコード (できるだけ小規模で、現状のエラー以外の問題が無いことが望ましい) ・調査したこと などが書いてあるとGoodです。
guest

0

一応、解決したコードを記載しておきます。自分と同じ悩みを持っている方の参考になれば幸いです!!

python3

1str = "PPPPWWWWSS" 2for i in range (2): 3 paramate = 0 4 for i in str[paramate:10]: 5 print(i) 6 paramate += 1

paramateの値を、最初のfor文の部分に書くべきでした。こうすることで、for文のループ終了と共に、paramateの値更新ができるようになりました。

投稿2019/01/17 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

次のコードと実行結果を調査してみてください。
slide.py

python3

1str = "PPPPWWWWSS" 2for i in range(len(str)): 3 for x in str[i:10]: 4 print(x, end="") 5 print( )

実行結果
イメージ説明

投稿2019/01/15 13:28

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/17 10:53

こういうやり方もあるんですね!!勉強になります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問