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

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

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

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

Q&A

解決済

2回答

1371閲覧

他のPythonファイルを実行できない(2)

City

総合スコア25

Python 3.x

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

0グッド

0クリップ

投稿2018/03/21 07:55

本日立て続けの質問になります。

さきほどは...
{b.pyからa.pyファイルを開いても黒い画面が一瞬表示されるだけ
→a.pyの中身はprint("(`・ω・´)")だけだった。
→input("")などを加えることで解決する}
シェルを終了させないような要素が必要であるとのご指摘を受け、
強敵(思った通りの動きをしない)の大半は解決することができました。

そして、
順に乗って同じ方法による解決を試みました。
しかし...

最後のエラー(思った通りに動かない = c.pyからd.pyを実行しようとすると一瞬黒い画面が表示され消える)
は解決の兆しを見せません。
ただ、こちらに関してはファイルの場所はあっていますがコードに自信がありません。

ご教授ください。

Python

1""" 2ユーザーからのフィードバックをbox.pyにかきこめる画面を表示します(c.pyの内容)。 3空の行にsendと入力するとフィードバック送信画面は消えて、 4ありがとう!(∩´∀`)∩と表示される(d.pyの内容)プログラムです。 5 6随分拙いものに見えることと思いますがごめんなさい。 7""" 8 9import os 10import sys 11 12print(""" 13 14意見をください 15 16""") 17 18file = "box.py" 19 20while True : 21 22 q = input(">>>") 23 if not q : 24 continue 25 26 if q != "send" : 27 with open(file,"a",encoding="utf_8") as obj : 28 obj.write(q + "\n") 29 continue 30 31 if q == "send": 32 line = "-"*50 33 with open(file,"a",encoding="utf_8") as obj2 : 34 obj2.write(line + "\n") 35 break 36else : 37 os.system("start python d.py") #このときです。一瞬黒い画面が表示されて終わります。 38 sys.exit()

Python

1#d.pyの中身です。 2 3import sys 4 5print(""" 6 7ありがとう!(∩´∀`)∩ 8 9""") 10 11q = input("どういたしまして!") 12 13if q : 14 sys.exit() 15""" 16c.pyから開くd.pyには 17ちゃんとシェルを一瞬で終了させてしまわないような要素(input())を 18いれていますし、これはもはや神秘であるとさえおもいました。 19""" 20

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

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

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

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

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

guest

回答2

0

回答文ではないですが、追記・修正依頼に書ききれなかったのでこちらに書きます。

KSwordOfHasteさんのコードを流用しつつ。。
os.system('start python d.py')としなくても、pythonにはimport文があるので、
import dを行い関数を呼び出す形にすれば、良いかと。

c.py

Python

1# -*- coding: utf8 -*- 2import os 3# d.pyをimportする。 4import d 5 6 7def main() -> None: 8 print(""" 9 10 意見をください 11 12 """) 13 with open('box.txt', 'w', encoding='utf-8') as f: 14 while True: 15 q = input('>>> ') 16 if q == 'send': 17 break 18 f.write(q + '\n') 19 f.write('-' * 50 + '\n') 20 # d.pyの関数を呼び出す。 21 d.thank_you() 22 23 24if __name__ == '__main__': 25 main() 26

d.py

Python

1# -*- coding: utf8 -*- 2import sys 3 4 5# thank_you 関数を作成する 6def thank_you() -> None: 7 print(""" 8 9 ありがとう!(∩´∀`)∩ 10 11 """) 12 13 q = input("どういたしまして!") 14 15 if q: 16 sys.exit() 17 18 19def main() -> None: 20 thank_you() 21 22 23if __name__ == '__main__': 24 main() 25

投稿2018/03/21 15:14

編集2018/03/21 15:16
umyu

総合スコア5846

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

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

KSwordOfHaste

2018/03/21 15:20

startを使っておられるのでc.py起動consoleとは別のコンソール画面でd.pyを動かす意図があるのかなぁと思ったのですが... 言われてみれば質問者さんの意図が単にc.pyからd.pyを呼び出したかっただけとも思えてきました。
City

2018/03/21 21:48

import文という思想もあったのですね。自分はpython本をざっと読みましたが どうもクラス定義の意義や使い方がよくわかりませんでした。 そんなわけで__init__など見ると潜在的に少し距離を置いてしまうみたいです。 あ、それについてはまた勉強していくつもりです... 別のコンソール画面でd.pyを動かす必要のない場合はいただいたコードがスマートなので ありがたくいただきます。ありがとうございました。
guest

0

ベストアンサー

以下のコードをご覧ください。

python

1while True: 2 break 3else: 4 print('end of while (A)') 5 6cont = True 7while cont: 8 cont = False 9else: 10 print('end of while (B)')

実行してみると'end of while (B)'しか表示されません。つまりwhile ... elseという構文でelse部分が実行されるのはwhileに指定した条件が不成立の場合であり、breakでwhileループを中断した場合は実行されないようです。

自分はpythonのwhile ... else構文を初めて知りましたが、使いどころが難しい感じがします。本件の場合while ... elseを使う利点はあまりない気がしますので、例えば以下のように書いた方が平易に思えました。

python

1import os 2 3print(""" 4意見をください 5""") 6 7# プログラム実行の度にbox.txtの内容を作り直すようにしてみました。 8# 内容がpythonスクリプトではないのでbox.txtというファイル名にしました。 9 10with open('box.txt', 'w', encoding='utf-8') as f: 11 while True: 12 q = input('>>> ') 13 if q == 'send': 14 break 15 f.write(q + '\n') 16 f.write('-' * 50 + '\n') 17os.system('start python d.py')

投稿2018/03/21 09:05

KSwordOfHaste

総合スコア18394

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

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

City

2018/03/21 09:46

新しい学びが大いにありました。 最初の例のような短い文でプログラムの動き方をテストする重要性を改めて感じつつ これでひと段落、区切りをつけることができました。 エレガントなコード、そして繊細でわかりやすい解説に感謝いたします。
KSwordOfHaste

2018/03/21 10:01

自分はwhile...elseを知らなかったので最初質問者さんのコードを拝見して「???」と思いちょこっと動かして構文エラーにならないので「!!!」と感じました。 > 短い文でプログラムの動き方をテスト 実際に試すのはおおまかな理解に役立ちますが、やはり仕様を確認(一次情報源を確認)するのがベストではあります。Pythonの言語リファレンスは他の言語に比べるとずいぶん平易(結構柔らかく書いてある)なため積極的に参照することをお勧めします。 https://docs.python.jp/3/reference/compound_stmts.html#the-while-statement
City

2018/03/21 12:11

感覚が研ぎ澄まされているんですかね、さすがです。 上のような、解説ページがあると私のようなものには特に助けになります。 また、それを教えてくれる存在も貴重だと思っています。 お世話になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問