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

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

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

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

Q&A

解決済

2回答

911閲覧

Python3.6 importがうまくいかない

yosshi

総合スコア11

Python 3.x

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

0グッド

0クリップ

投稿2018/06/01 07:00

編集2018/06/01 07:10
コード ```### 前提・実現したいこと 異なるファイル間のimportがうまくいかないことを解決したい。 ### 発生している問題・エラーメッセージ 異なるファイル間のimportがうまくいきません 単独のファイルとして各々数値を入力して扱うと上手くいくのですが......。 最初に数値として100001000000を入力すると、こちらから数値を入力するのは1回で良いはずなのに、恐らくenzan3.pyの最後以外を実行された状態(配列とprintの値を返してくる)で、また数値入力を要求されます。 無視してエンターを押すと下記のエラーを吐きます。

エラーメッセージ
Please Enter Number100001000000
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0]
-i
Please Enter Number
Traceback (most recent call last):
File "enzan3.py", line 8, in <module>
import test2
File "C:\Users\hogehoge\test2.py", line 1, in <module>
from enzan3 import list1
File "C:\Users\hogehoge\enzan3.py", line 4, in <module>
if l[0]==1 and l[3]==0:
IndexError: list index out of range

### 該当のソースコード Python3 ソースコード ・enzan3.py(動いている箇所のみ) ```import numpy as np n = input("Please Enter Number") l = [int(x) for x in list(str(n))] if l[0]==1 and l[3]==0: list1 = [l[3], l[1], l[2], l[0], l[4], l[5], l[6], l[7], l[8], l[9], l[10], l[11]] print(list1) print("-i") import test2

・test2.py(全て)

Python3

1from enzan3 import list1 2 3for m1 in range(1, 12): 4 if l[0]==1 and l[m1]==1: 5 print(m1) 6 7for m2 in range(2, 12): 8 if l[1]==1 and l[m2]==1: 9 print(m2+10) 10 11for m3 in range(3, 12): 12 if l[2]==1 and l[m3]==1: 13 print(m3+19) 14 15for m4 in range(4, 12): 16 if l[3]==1 and l[m4]==1: 17 print(m4+27) 18 19for m5 in range(5, 12): 20 if l[4]==1 and l[m5]==1: 21 print(m5+34) 22 23for m6 in range(6, 12): 24 if l[5]==1 and l[m6]==1: 25 print(m6+40) 26 27for m7 in range(7, 12): 28 if l[6]==1 and l[m7]==1: 29 print(m7+45) 30 31for m8 in range(8, 12): 32 if l[7]==1 and l[m8]==1: 33 print(m8+49) 34 35for m9 in range(9, 12): 36 if l[8]==1 and l[m9]==1: 37 print(m9+52) 38 39for m10 in range(10, 12): 40 if l[9]==1 and l[m10]==1: 41 print(m10+54) 42 43for m11 in range(11, 12): 44 if l[10]==1 and l[m11]==1: 45 print(m11+55) 46

試したこと

いろいろ調べましたが、何をしていいかわからないので手付かずです。

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

Python3.6
Atom

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

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

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

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

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

mather

2018/06/01 07:03

ソースコードがインデントも消えて読みにくいので、コードブロックで囲んでください。
yosshi

2018/06/01 07:11

囲みました。
yosshi

2018/06/01 07:12

importを使う場面ではないのでしょうか。
guest

回答2

0

ベストアンサー

enzan3.py のあと test2.py を実行したいのでしょうか?(という意図した部分を質問に書くと良いです。)
まず import の使い方が間違っています。importはコードの内容を他から持ってきてコピーするものではなく、他のファイルで定義された関数やクラスなどを呼び出すために使います。

たとえば今回の例でいうと test2.py には

python

1def print_list(l): 2 for m1 in range(1, 12): 3 if l[0]==1 and l[m1]==1: 4 print(m1) 5 6 for m2 in range(2, 12): 7 if l[1]==1 and l[m2]==1: 8 print(m2+10) 9...

などのように「関数として」処理を定義しておき、

python

1from test2 import print_list 2 3print_list(list1)

のように呼び出して使うものです。

Pythonの import の使い方は公式リファレンスもしっかり見て確認してほしいのですが、ここには書かなかったもう一つのポイントがあります。それは自分で調べてください。

投稿2018/06/01 07:21

mather

総合スコア6753

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

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

yosshi

2018/06/01 07:33

解決しました! ありがとうございます。 いろいろと調べながらやっていきます。
guest

0

importは処理を移すための機能ではありません
enzan3.pyの最終行を削除すれば循環は解消しますが、本質的な解決策にはなりません。

関数の使い方を勉強してみてください。

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Python
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2018/06/01 07:05

編集2018/06/01 07:06
LouiS0616

総合スコア35658

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

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

yosshi

2018/06/01 07:33

ありがとうございます。 importを誤解していました。 勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問