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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

205閲覧

(python)for文のところでミスをしているのでしょうか?

wafflar

総合スコア18

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/09 07:02

前提・実現したいこと

X_list=[//******]
↓  
X_list=[6,3,9]

「*」の数を「/」で区切って数字に変換したいです。

発生している問題・エラーメッセージ

質問したいところは、30行目あたりの下からなんですが、 それまでの状況で、 X=20 Y=40 X_list=[******/***/*********] Y_list=[*****/**********/****************/******] array=[[1,34],[1,17],[0,7],[1,6],[0,11]] が作られています。 困っているところが、 X_listの中にある「*」の数を「/」で区切って数字にして、[6,3,9]という風にしたいんですけど、 空のリストにappendして作ろうと思って作ってみると、[6,3]で止まってしまい、「9」が入らないです。 これは、for文でミスをしてしまっているんでしょうか?

該当のソースコード

Python

1import sys 2 3list_0 = [] 4list_1 = [] 5list_result_0 = [] 6list_result_1 = [] 7array=[] 8for line in sys.stdin.readlines(): 9 array.append(list(map(int, line.rstrip().split(" ")))) 10 11X = array[0][0] 12Y = array[0][1] 13 14X_list = "*"*X 15Y_list = "*"*Y 16del array[0] 17for i in range(len(array)): 18 if array[i][0] == 0: 19 list_0.append(array[i][1]) 20 elif array[i][0] == 1: 21 list_1.append(array[i][1]) 22 23for j in range(len(list_0)): 24 X_list = X_list[:list_0[j]-1] + "/" + X_list[list_0[j]:] 25 26for k in range(len(list_1)): 27 Y_list = Y_list[:list_1[k]-1] + "/" + Y_list[list_1[k]:] 28 29#ーーーここから下が質問のところですーーー 30list_temp = [] 31kaisu = 0 32result = 0 33for n in X_list: 34 if n == "*": 35 kaisu+=1 36 result+=1 37 elif n == "/" or kaisu == len(X_list): 38 list_temp.append(result) 39 kaisu+=1 40 result=0 41print(list_temp)

試したこと

while文でやってみたり、elifのところが違うのかもと思い色々頑張ったんですが、出来ませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

/で単純に区切りたいならspilit関数を使ってみてはどうですか?

投稿2020/01/09 07:31

Nippun

総合スコア1147

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

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

wafflar

2020/01/09 16:00

あっ、なるほど。 思いつかなかったです。 ありがとうございます!
guest

0

ベストアンサー

X_listは最後[*]で終わっていて、kaisu == len(X_list)の判定に行かずにfor文を抜けています。
下記でいかがでしょう。

python

1for n in X_list: 2 print(n) 3 if n == "*": 4 kaisu+=1 5 result+=1 6 elif n == "/": 7 list_temp.append(result) 8 kaisu+=1 9 result=0 10 if kaisu == len(X_list): 11 list_temp.append(result) 12 13print(list_temp)

投稿2020/01/09 07:34

jeanbiego

総合スコア3966

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

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

wafflar

2020/01/09 15:58

回答ありがとうございます。 この通りにしたら出来ました。けど、すみません。上手く理解出来ないです。申し訳ないです。 elifでorを使って書くのと、別にifで書くのは、同じことをしている感じにはならないのでしょうか?
wafflar

2020/01/09 15:59

あっ、何回も見てたら理解出来ました! すみません、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問