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

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

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

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

Python

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

Q&A

解決済

1回答

3750閲覧

pythonで日時を表示させながら次の処理を実行させたい

morutemu

総合スコア45

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/04/07 14:32

編集2018/04/07 15:34

python初心者です。
タイトルだとわかりずらいのですが

関数を作成し、その中でループさせ、日時を変数かなんかに取得しておきたいのですが、
その中の関数でループさせると次の処理に進めなくなるので、どうしたらよいか
迷っているところです。力をお貸しください。

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4# ++++ モジュール ++++ 5import datetime 6import time 7 8# ++++ 変数 ++++ 9global date 10global time 11 12# ++++ 関数 ++++ 13# 現在日時の処理 14def DateAndTime(): 15 while True: 16 dt = datetime.datetime.now() 17 date = dt.strftime("%Y/%m/%d") 18 currentTime = dt.strftime("%H:%M:%S") 19 print(date) 20 print(currentTime) 21 time.sleep(1) 22 23# ++++++++++++++++++++++++++++++++++++++++ 動作 +++++ 24if __name__ == "__main__": 25# 現在時刻を取得する 26 DateAndTime() 27 print("ここの処理に進めなくなる")

*追伸
ループの中で処理を書いていけばよいとのことでしたが、
後にある時間が来たら処理をさせたいのと、何かボタンを押したら処理するような
記述もしていきたいですが、その場合は、ループの中に入れてとなると難しいですかね?

以前に、次のような処理をした際は、CurrentTime関数の処理を行いながら、違う処理ができたのですが、ウィンドウを利用しない場合もTkinter?を使うのでしょうか??
⇒ 回答者様より、TkinterはGUI用で以下の使い方はNG

python

1from tkinter import * 2root = Tk() 3def CurrentTime(): 4 buff.set(strftime('%H:%M:%S')) 5 root.after(1000, CurrentTime) 6buff = StringVar() 7 8Label(root, textvariable = buff).place(x = 130, y = 20) 9CurrentTime()

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

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

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

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

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

guest

回答1

0

ベストアンサー

ええっと、一定間隔(例としてあがっているプログラムでは1秒おき)で時間を利用した何らかの処理をしたいということであれば、ループの中にその処理を入れれば良いのでは。単に一回だけ時間がわかれば良いのなら、ループをなくせば良い。

質問の追記を受けて

やりたいことはわかりました。
TkはGUIツールキットなので、GUIを作るとき以外は使いません。
どうしてTkでそういう処理ができるのかというと、端的に言えばTkにイベントドリブンの概念があるからです。これはここで説明して理解して頂くのは難しいし、やりたくないので、ご自身で勉強して理解してください。一応wikipediaを貼っておきます。
イベント駆動型プログラミング - Wikipedia
それなりに難解な概念なので、初心者のうちは敢えて取り組まない方が良いかもしれませんが・・・。

更に追記

「そういえば、時間を表示したいだけなら別スレッドで延々と走らせればなんとかなるなぁ」と思ったので、書いたコードを示しておきます。無駄にフィボナッチ数を計算させてみました。

python

1# coding: UTF-8 2 3from datetime import datetime 4import threading 5 6stop = False 7 8def timer(): 9 print(datetime.now().strftime("%Y/%m/%d %H:%M:%S")) 10 if not stop: 11 t1 = threading.Timer(3, timer) 12 t1.start() 13 14def fib(n): 15 if n < 2: 16 return n 17 else : 18 return fib(n-1)+fib(n-2) 19 20def main(): 21 global stop 22 t1 = threading.Timer(1, timer) 23 t1.start() 24 while True: 25 line = input() 26 if line == "q": 27 break 28 else: 29 if line.isnumeric() and int(line) >= 0: 30 print("FIB({0})={1}".format(int(line), fib(int(line)))) 31 else: 32 print("0以上の整数を入力してください") 33 stop = True 34 t1.join() 35 36if __name__ == "__main__": 37 main()

なので、質問の回答としては「スレッド使えばできます」が最終的な答えになりますね。

投稿2018/04/07 14:41

編集2018/04/07 17:03
hayataka2049

総合スコア30933

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

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

morutemu

2018/04/07 15:36

となると、CUI上ではどのような処理を行っていけばよいでしょうか? ループをなくす?方向でしょうか?
hayataka2049

2018/04/07 16:30

別スレッドで日時のタイマーを回し、curses(ライブラリです)あたりでうまく入出力を裁くことになるのでは。どこまで実現できるのかは私も知りません。素直にGUI書いた方が楽しそう
morutemu

2018/04/07 23:00

ありがとうございました。 ちょっと調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問