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

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

新規登録して質問してみよう
ただいま回答率
85.50%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

Q&A

解決済

2回答

7298閲覧

IndentationError: unindent does not match any outer indentation level

Myyuu3

総合スコア13

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

0グッド

0クリップ

投稿2018/02/11 09:50

編集2018/02/11 10:05

pythonで以下のプログラムを実行すると
File "C:\Users\ユーザ名\Documents\testcode.py", line 21
except:
^
IndentationError: unindent does not match any outer indentation level
と出てしまいます。どうしたらいいのでしょうか。

#coding: UTF-8 import linecache a=1 Q0002=0 Q0004=0 target_line==linecache.getline('C:\Users\ユーザ名\Documents\sample.txt',a) while Q0001==0: try: Q0003=target_line[Q0002] if Q0003=="": print(Q_array_0001[Q0004]) Q0002+=1 Q0004+=1 continue Q_array_0001[Q0004]=Q0003 Q0002+=1 except: Q0001=1

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

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

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

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

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

guest

回答2

0

ベストアンサー

お願い!!!! IDE(統合開発環境)を導入してくださいな。

■実行エラーが発生する箇所
1, ==比較文を使用している =演算子ではないでしょうか?

Python

1target_line==linecache.getline('C:\Users\ユーザ名\Documents\sample.txt',a)

2, 以下の2変数が未定義です。
2-1,while Q0001==0:としていますが、質問文のコードでは変数:Q0001が未定義です。
2-2,print(Q_array_0001[Q0004]) で表示している、Q_array_0001も同様です。

■気になった点
1, 変数名がQ0001Q0002では何のための変数か回答者は判断が付きづらいです。
適切な変数名に変更すると認識の齟齬がすくなくなります。

2, except:をwhileループの抜ける条件としていますが、この条件は一体なんでしょうか。。


最終的にどういう事をやりたいコードなのかを説明して頂けるとありがたいのですが。。。
target_line を一文字ずつprintしたいだけなら、以下のコードで可能ですが。

Python

1target_line = linecache.getline(r'C:\Users\ユーザ名\Documents\sample.txt', a) 2for c in target_line: 3 print(c)

個人的に書き直したソースコード。

Python

1# -*- coding: utf8 -*- 2import linecache 3 4 5def main() -> None: 6 line_no = 1 7 file_name = r'sample.txt' 8 target_line = linecache.getline(file_name, line_no) 9 for c in target_line: 10 print(c) 11 12 13if __name__ == '__main__': 14 main() 15

2018/02/12追記。
LouiS0616さんの回答のsplitを使ったソースコードの方が何を行っているのかが分かりやすいのでおすすめですが、コメント欄のやりたいことの2つの配列を使ったソースコードです。

Python

1# -*- coding: utf8 -*- 2import linecache 3 4 5def split_word_list(line: str) -> list: 6 word_list = [] 7 word = [] 8 for c in line: 9 if c == ' ': 10 print(word) 11 word_list.append(word) 12 word = [] 13 continue 14 word.append(c) 15 else: 16 print(word) 17 word_list.append(word) 18 return word_list 19 20 21def main() -> None: 22 line_no = 1 23 file_name = r'sample.txt' 24 target_line = linecache.getline(file_name, line_no) 25 target_line = 'This is an apple' 26 word_list = split_word_list(target_line) 27 print(word_list) 28 29 30if __name__ == '__main__': 31 main()

投稿2018/02/11 11:32

編集2018/02/11 16:22
umyu

総合スコア5846

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

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

LouiS0616

2018/02/11 12:00

バックスラッシュをエスケープしていないのも問題ですね。
umyu

2018/02/11 12:04 編集

そういえば、そうですね。回答文はraw文字列に変更しておきます。
Myyuu3

2018/02/11 12:20

やりたいこと: 1:getlineでテキストファイルから特定の一行を取り出す。 2:取り出したデータをさらに一文字ずつ取り出しそれを配列に代入する。(一文字ずつ取り出しているときに途中で空白スペースがあれば次の2つめの配列に移すようにする。配列を移し替えるときに配列に代入してある結果を表示する。) 3:一行の文字列にある文字をすべて取り出したらループを停止させる。
LouiS0616

2018/02/11 12:31

具体的に理想の実行例を追記してください。 --- こういうこと? This is an apple ⇒ [['T', 'h', 'i', 's'], ['i', 's'], ['a', 'n'], ['a', 'p', 'p', 'l', 'e']]
Myyuu3

2018/02/11 12:38

その通りです
umyu

2018/02/11 12:55

>Myyuu3さんへ やりたいことの内容のコメントありがとうございます。
guest

0

tryとexceptの文頭が揃っていないからです。スペース4つに統一してください。

質問でコードを提示する際は、面倒でも必ずテキストとしてください。
まさか物差しでインデントを測る日が来るとは思いませんでした...


既にumyuさんが指摘されていますが、変数の命名を連番にするのは絶対にやめてください。
『端的に表現できること』は、想像以上にずっと重要なのです。
広く読まれている『リーダブルコード』でも、最初に命名の話題が取り上げられています。

例えば、部活動の名前が『文化部1』『文化部2』『運動部1』...とかだったら分かりづらいですよね?
思考を先送りにするような命名は避けるべきです。


あと、具体的に例外を指定しないexceptも良くないですよ。
恐ろしいことに、次のコードも動作してしまうのです。

Python

1>>> try: 2... ptint(1) # うっかりスペルを間違えた! 3... except: 4... print('error!') 5... 6error!

一行ならすぐ気付けますが、ありとあらゆる例外を考慮しなければならなくなり有害です。

書いてみた

This is an apple ⇒ [['T', 'h', 'i', 's'], ['i', 's'], ['a', 'n'], ['a', 'p', 'p', 'l', 'e']]

Python

1src_str = 'This is an apple' 2dst_list = [list(word) for word in src_str.split()] 3print(dst_list) 4"""出力 5[['T', 'h', 'i', 's'], ['i', 's'], ['a', 'n'], ['a', 'p', 'p', 'l', 'e']] 6"""

投稿2018/02/11 09:59

編集2018/02/11 12:41
LouiS0616

総合スコア35658

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

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

umyu

2018/02/11 10:06

■豆知識 Windowsキー + Wで画面スケッチ→定規ツールがあります。(定規の角度はホィールで変更できます)
Myyuu3

2018/02/11 10:21

tryとexceptの文頭を揃えてもうまくできません。
LouiS0616

2018/02/11 12:01

@umyu さん そういうのもあるかな、と思いはしたんですが、目の前に物差しがあったので使っちゃいました。 何はともあれ、コメントありがとうございます。
LouiS0616

2018/02/11 12:02

@Myyuu3 さん どのように『上手くいかない』のですか? エラーの状況を説明するのは、コーディングスキル向上の大切な一歩です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問