2016-08-07 5 views
-5

私はGPA電卓を作ろうとしており、その結果をfloatとしたいと思います。しかし、私は次のエラーが表示されます:cannot convert string to float:...Python 3で文字列を浮動小数点数に変換できません

私はこのサイトで類似したソリューションを検索しましたが、どちらもうまくいきませんでした。あなたに私にいくつかのヒントを与えることができれば助けになるだろう。

from tkinter import * 

class gpa: 

    def __init__(self, master): 

     master.title("GPA CALCULATOR") 

     self.result = StringVar() 
     self.res = Entry(master, width = 60, textvariable = self.result) 
     self.res.grid(row = 0, column = 0, columnspan = 6,padx = 3, pady = 6, ipady = 6, sticky = "N E W S") 

     labels = '1st Semester GPA: ', '2nd Semester GPA: ','3rd Semester GPA: ','4th Semester GPA: ','5th Semester GPA: ','6th Semester GPA: ','7th Semester GPA: ','8th Semester GPA: ', 


     row = 1 
     col = 0 
     i = 1 
     for label in labels: 

      self.l = Label(master, text = label) 
      self.l.grid(row = row, column = col, sticky = E) 
      row = row + 1 






     self.var1 = StringVar() 
     self.var2 = StringVar() 
     self.var3 = StringVar() 
     self.var4 = StringVar() 
     self.var5 = StringVar() 
     self.var6 = StringVar() 
     self.var7 = StringVar() 
     self.var8 = StringVar() 


     rows = 1 
     cols = 1 

     for x in range(1, 9): 


      self.ent = Entry(master, width = 30, textvariable = 'self.var'+str(x)) 
      self.ent.grid(row = rows,pady = 6, column = cols, columnspan = 4, sticky = W) 
      rows = rows + 1 

      print('self.var' + str(x)) 



     self.button = Button(master, width = 20, text = "Calculate", command = self.calc()) 
     self.button.grid(row= 10, column = 1,columnspan = 5, sticky = E) 


    def calc(self): 

      self.val1 = float(self.var1.get()) 
      self.val2 = float(self.var2.get()) 
      self.val3 = float(self.var3.get()) 
      self.val4 = float(self.var4.get()) 
      self.val5 = float(self.var5.get()) 
      self.val6 = float(self.var6.get()) 
      self.val7 = float(self.var7.get()) 
      self.val8 = float(self.var8.get()) 

      self.add = self.val1 + self.val2 + self.val3 + self.val4 + self.val5 + self.val6 + self.val7 + self.val8/8 
      print(self.add) 

      self.result.set(self.add) 



root = Tk() 
root.configure(padx =6, pady = 12) 

run = gpa(root) 

root.mainloop() 
+0

文字列を浮動小数点に変換することはできません:間違ったタイトルを申し訳ありません。 – Ahmad

+0

デバッグの目的で、self.var1.get()と他の部分をcalcの先頭に印刷してください。たぶんそれらの型 - >型(self.var1.get()...) – sascha

+0

私はそれをしたが、同じエラーが計算外に表示されます.. – Ahmad

答えて

2

あなたのSTRINGVARの間違った...

textvariable = "self.var" + str(x) 

これは単なる文字列で設定しています。 StringVarへの参照ではありません。あなたがこれをやっているあなたのcalc機能で

>>> float('') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: could not convert string to float: 

あなたSTRINGVARには「価値」を持っていないので - STRINGVARへの参照は、それが更新されていない正しく渡されていなかったので、デフォルトではです空の文字列に設定します。

あなたが繰り返しSTRINGVARのこの方法を取得したい場合は...いくつかのオプションがあります:

使用__dict__self.__dict__['var%d' % i]

使用getattrは:getattr(self, 'var%d' % i)

リスト/タプルとインデックスに入れどちらか。 self.*を使用するとクラスネームスペースになりますので、冗長ですがdictインデックスを使用してください。あなたは上記を使用できます。エントリが空の場合にも、あなたのコマンドが間違って設定している

がさえ正しくSTRINGVAR年代の彼らは、更新フロート変換を保証するものではないように使用して...彼らはまだ...空である可能性があります。 command=self.calc()。これは です。関数を呼び出し、コマンドとして返すものを設定します。です。使用 command=self.calc

+0

あなたはどのように "self.var" – Ahmad

+0

ありがとう@Pythonista :) – Ahmad

+0

おかげで、それは働いた.. – Ahmad

関連する問題