前提・実現したいこと
python3でtkinterを使って、数字を入力するとfizzbuzzを判定するプログラムを作っています。
発生している問題・エラーメッセージ
str,floatを入力、またはなにも価を入れないでボタンを押すと下記のようなエラーが出ます。
最後の''には入力したstr,floatが入ります。
値を入れない場合は''です。
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\ryota01\Anaconda3\envs\tensorflow13\lib\tkinter\__init__.py", line 1699, in __call__ return self.func(*args) File "tkfizzbuzz.py", line 36, in <lambda> Button1 = tkinter.Button(text=u'FizzBuzz', command=lambda: fizzbuzz(Entry1.get())) File "tkfizzbuzz.py", line 15, in fizzbuzz n = int(n) ValueError: invalid literal for int() with base 10: ''
該当のソースコード
python
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import tkinter 5import sys 6 7root = tkinter.Tk() 8root.title(u'Fizz Buzz') 9 10#definition 11def fizzbuzz(n): 12 fzbz = "Fizz Buzz" 13 fz = "Fizz" 14 bz = "Buzz" 15 n = int(n) 16 if n % 15 == 0: 17 resltfizbuz(fzbz) 18 elif n % 3 == 0: 19 resltfizbuz(fz) 20 elif n % 5 == 0: 21 resltfizbuz(bz) 22 else: 23 resltfizbuz(n) 24 Entry1.delete(0,tkinter.END) 25 26def resltfizbuz(reslt): 27 Listbox1.insert(tkinter.END,reslt) 28 29 30Entry1 = tkinter.Entry(width=20) 31Entry1.pack() 32 33Listbox1 = tkinter.Listbox() 34Listbox1.pack() 35 36Button1 = tkinter.Button(text=u'FizzBuzz', command=lambda: fizzbuzz(Entry1.get())) 37Button1.pack() 38 39root.mainloop()
試したこと
nがintの時だけfizzbuzzを判定させるために、fizzbuzz(n)を下記のように変えると何を入力してボタンを押しても反応しなくなりました。
intの場合はizzzbuzzを判定し、それ以外はEntry1.delete(0,tkinter.END)を処理するようにするにはどうすればいいですか?
def fizzbuzz(n): fzbz = "Fizz Buzz" fz = "Fizz" bz = "Buzz" if type(n) == int: n = int(n) if n % 15 == 0: resltfizbuz(fzbz) elif n % 3 == 0: resltfizbuz(fz) elif n % 5 == 0: resltfizbuz(bz) else: resltfizbuz(n) else: return 0 Entry1.delete(0,tkinter.END)
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/16 03:30
2018/02/16 05:45
2018/02/16 09:52