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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

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

Q&A

解決済

2回答

965閲覧

【Python】print()文を使いましたが、コンソールに出力されません。

JinGoda

総合スコア20

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

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

0グッド

0クリップ

投稿2020/01/26 06:17

前提・実現したいこと

使用バージョン:Python 3.8.1, sqlite3 3.30.1

ゲームのダメージ計算機をパイソンの中で作成したく思い、作ろうとしています。
この中で実際にダメージを計算する部分を作っています。

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

エラーメッセージはなく、何も出力されません。
print()を使って出力させているのですが、コンソールに表示がありません。

該当のソースコード

Python

1def click(): 2 3 A = a.get() 4 B = b.get() 5 C = c.get() 6 7 cur.execute("SELECT A FROM dex WHERE Name = '%s'" % A) 8 Atk = cur.fetchone() 9 10 cur.execute("SELECT C FROM dex WHERE Name = '%s'" % A) 11 SpA = cur.fetchone() 12 13 cur.execute("SELECT type1 FROM dex WHERE Name = '%s'" % A) 14 type1 = cur.fetchone() 15 16 cur.execute("SELECT type2 FROM dex WHERE Name = '%s'" % A) 17 type2 = cur.fetchone() 18 19 cur.execute("SELECT type FROM moves WHERE name = '%s'" % B) 20 mtype = cur.fetchone() 21 22 cur.execute("SELECT B FROM dex WHERE Name = '%s'" % C) 23 Def = cur.fetchone() 24 25 cur.execute("SELECT D FROM dex WHERE Name = '%s'" % C) 26 SpD = cur.fetchone() 27 28 cur.execute("SELECT power FROM moves WHERE name = '%s'" % B) 29 Power = cur.fetchone() 30 31 cur.execute("SELECT mtype FROM moves WHERE name = '%s'" % B) 32 mAtktype = cur.fetchone() 33 34 if type1 == mtype: 35 36 mAtk = 1.5 37 38 elif type2 == mtype: 39 40 mAtk = 1.5 41 42 else: 43 44 mAtk = 1.0 45 46 bin = tk.BooleanVar() 47 48 if bin.get(): 49 50 range_rev = 0.75 51 52 else: 53 54 range_rev = 1.0 55 56 if mAtktype == A: 57 58 dmg = int(int(22 * Power[0] * Atk / Def) / 50 + 2) * range_rev * mAtk 59 60 print(dmg) 61 62 elif mAtktype == C: 63 64 dmg = int(int(22 * Power[0] * SpA / SpD) / 50 + 2) * range_rev * mAtk 65 66 print(dmg)

試したこと

global dmgとして、def clickの最後にprint()を実行しましたが、当然ながら"referenced before assignment"、定義がなされていないというエラーメッセージが出ました。

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

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

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

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

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

frederick_1974

2020/01/26 06:28

コードでは、print(dmg)が実行されるのは、mAtktypeがA又はCと等しい時だけだと思うのですが、その何れかであるのは間違い無いのでしょうか?
JinGoda

2020/01/26 07:10

先ほど確認をしたのですが、mAtktypenのSELECT文をコンソールで実行したところ、A,Cが返されたので間違いないと思います。
guest

回答2

0

ベストアンサー

前の質問の続きであれば、そもそも比較している2つの変数値の型が異なります。型を合わせましょう。

ちなみにコードが意図しない動作をした場合は、処理の途中にprint文を入れて変数の値や型を確認するようにすると問題の原因を突き止めやすくなります。

Python

1import tkinter as tk 2import sqlite3 3 4def click(): 5 A = a.get() 6 7 con = sqlite3.connect('test.db') 8 cur = con.cursor() 9 cur.execute('drop table if exists t_test') 10 cur.execute('create table if not exists t_test(num int)') 11 cur.execute("insert into t_test(num) values(?)",(123,)) 12 con.commit() 13 cur.execute("select num from t_test") 14 n = cur.fetchone() 15 con.close() 16 17 print(A, type(A)) 18 print(n, type(n)) 19 20 if A == n: 21 print('hit') 22 else: 23 print('miss') 24 25win = tk.Tk() 26a = tk.Entry() 27a.pack() 28a.insert(index = 'insert', string = '123') 29btn = tk.Button(win, text = 'Click', command = click) 30btn.pack() 31win.mainloop() 32 33""" 34123 <class 'str'> 35(123,) <class 'tuple'> 36miss 37"""

投稿2020/01/26 07:26

can110

総合スコア38262

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

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

JinGoda

2020/01/26 14:28

また型のミスでした...ありがとうございます!
guest

0

printはif文の条件に合致しないと実行されないってのはわかるでしょうか。

なにもでないってのは、これらのifの条件にあってないってだけの話なんでは。

投稿2020/01/26 06:34

y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問