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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

1回答

2523閲覧

if文で条件分岐させて、それに合う文字を出力したい

taki.muramatsu

総合スコア7

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2021/09/17 06:50

前提・実現したいこと

if文で条件分岐させて、それに合う文字を出力したい

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

Answer_button 関数でEntry_appとansのそれぞれの値を比べて条件どうりの処理がした

import tkinter as tk import tkinter.ttk as ttk from sympy import * import pandas as pd import numpy as np import random import matplotlib.pyplot as plt from sympy.matrices import common #シンボルを定義 x = Symbol("x") y = Symbol("y") z = Symbol("z") a = Symbol("a") b = Symbol("b") c = Symbol("c") #基礎問題生成 for i in range(10): Question_No = random.randint(1,3) Val_No_1 = random.randint(1,9) Val_No_2 = random.randint(1,9) Val_No_3 = random.randint(1,9) if Question_No == 1: if Val_No_1 == 1: Integ = x ans = integrate(Integ) out_Integ = "∮"+"x"+" "+"dx" else: Integ =Val_No_1*x ans = integrate(Integ) out_Integ ="∮"+str(Val_No_1)+"x"+" "+"dx" elif Question_No == 2: if Val_No_1 and Val_No_2 == 1: Integ = x**2+x ans = integrate(Integ) out_Integ = "∮"+"x**2"+"+"+"x"+" "+"dx" else: Integ = Val_No_1*x**2+Val_No_2*x ans = integrate(Integ) out_Integ = "∮"+str(Val_No_1)+"x**2"+"+"+str(Val_No_2)+"x"+" "+"dx" else: if Val_No_1 and Val_No_2 and Val_No_3 == 1: Integ = x**3+x**2+x ans = integrate(Integ) out_Integ = "∮"+"x**3"+"+"+"x**2"+"+"+"x"+"+"+" "+"dx" else: Integ = Val_No_1*x**3+Val_No_2*x**2+Val_No_3 ans = integrate(Integ) out_Integ = "∮"+str(Val_No_1)+"x**3"+"+"+str(Val_No_2)+"x**2"+"+"+str(Val_No_3)+"x"+" "+"dx" #ウィンドウ切り替え def change_window(frame_name): frame_name.tkraise() #フレームワーク作成 def frame_create(): Frame_name = ttk.Frame(root) Frame_name.grid(row=0,column=0,sticky="nsew",pady=20) return Frame_name #問題ページの作成 def create_question(frame_name,change_frame): label_1 = ttk.Label(frame_name,text="以下の問題を解いてください") label_2 = ttk.Label(frame_name,text="回答を表示します") label_app = ttk.Label(frame_name,text=out_Integ) Entry_app = ttk.Entry(frame_name,width=30) button_home = ttk.Button(frame_name,text="ホームに戻る",command=lambda:change_window(change_frame)) answer_button = ttk.Button(frame_name,text="回答",command=lambda:Answer_button(Entry_app,frame_name)) label_1.pack() label_2.place(x=350,y=350) label_app.pack() Entry_app.place(x=300,y=300) button_home.place(x=350,y=420) answer_button.place(x=350,y=520) #回答ボタン def Answer_button(Entry_name,frame_name): Entry_ans = Entry_name.get() print(Entry_ans) print(ans) if ans == Entry_ans: Label = ttk.Label(frame_name,text="正解") Label.place(x=359,y=650) else: Label = ttk.Label(frame_name,text="不正解") Label.place(x=350,y=650) #ラベル生成 def label_create(frame_name,text_name): label_name = ttk.Label(frame_name,text=text_name) return label_name #ボタン生成 def button_create(frame_name,text_name,button_name,change_window_name): button_frame = ttk.Button(frame_name,text=text_name,command=lambda:button_name(change_window_name)) return button_frame #ラベル配置 def label_placcement(label_name,x_coord,y_coord): label_name.place(x=x_coord,y=y_coord) #ボタン配置 def button_placcement(button_name,x_coord,y_coord): button_name.place(x=x_coord,y=y_coord) if __name__ == "__main__": root = tk.Tk() root.geometry("800x800") root.grid_rowconfigure(0,weight=1) root.grid_columnconfigure(0,weight=1) #フレーム作成 frame = frame_create() frame_app_1 = frame_create() frame_app_2 = frame_create() frame_app_3 = frame_create() frame_app_4 = frame_create() frame_app_5 = frame_create() frame_app_6 = frame_create() #ホームウィジェット作成 label_1 = label_create(frame,"あなたの成長する積分アプリ") label_2 = label_create(frame,"⚠️x**2はxの2乗x**3はxの3乗を表しています") label_3 = label_create(frame,"1:基本レベル") label_4 = label_create(frame,"2:定期テストレベル") label_5 = label_create(frame,"3:センター試験レベル") label_6 = label_create(frame,"4:難関私立レベル") label_6 = label_create(frame,"5:難関国公立レベル") label_7 = label_create(frame,"6:弱点レベル") #ラベル配置 label_placcement(label_1,290,50) label_placcement(label_2,290,150) label_placcement(label_3,330,250) label_placcement(label_4,330,350) label_placcement(label_5,330,450) label_placcement(label_6,330,550) label_placcement(label_7,330,650) #問題ページボタン作成 button_1 = button_create(frame,"問題へ",change_window,frame_app_1) button_2 = button_create(frame,"問題へ",change_window,frame_app_2) button_3 = button_create(frame,"問題へ",change_window,frame_app_3) button_4 = button_create(frame,"問題へ",change_window,frame_app_4) button_5 = button_create(frame,"問題へ",change_window,frame_app_5) button_6 = button_create(frame,"問題へ",change_window,frame_app_6) #ボタン配置 button_placcement(button_1,350,280) button_placcement(button_2,350,380) button_placcement(button_3,350,480) button_placcement(button_4,350,580) button_placcement(button_5,350,580) button_placcement(button_6,350,680) #問題作成 create_question(frame_app_1,frame) frame.tkraise() root.mainloop()

試したこと

print文で.getで取得した値と#基本問題作成のasnに入っている値を確認したところ、同じものが
入っているにも関わらず正しい処理がされない
どっちも"不正解"と表示されてしまいます

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

型の異なる変数を比較しているからです。
以下のようにansを文字に変換すると意図した判定になります。
なお、ラベルの表示方法がちょっとまずいようで、不正解と正解が重なって表示されます。

Python

1 str_ans = str(ans) # <class 'sympy.core.add.Add'> -> str 2 if str_ans == Entry_ans:

投稿2021/09/17 07:01

can110

総合スコア38262

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

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

taki.muramatsu

2021/09/17 13:09

出来ました ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問