2016-08-07 3 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

String을 float로 변환 할 수 없습니다. 잘못된 제목으로 죄송합니다 .. – Ahmad

+0

디버깅 목적으로 self.var1.get() 및 기타 항목을 calc 맨 위에 인쇄하십시오. 어쩌면 그들의 유형 -> 유형 (self.var1.get() ...) – sascha

+0

나는 그랬지만 같은 오류가 계산 외부에 표시됩니다 .. – Ahmad

답변

2

당신은 당신의 StringVar의 잘못 ...

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

이 그냥 문자열로 설정하고 있습니다. StringVar에 대한 참조가 아닙니다. 당신의 calc 기능에

당신은이 일을하고 있습니다 : 당신의 StringVar 더 "가치"가없는

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

때문에 - stringvar에 대한 참조가 제대로 전달되지는 업데이트되지이기 때문에, 그것은 기본적으로이다 빈 문자열로 설정하십시오.

사용 __dict__ : self.__dict__['var%d' % i]

사용 getattr : getattr(self, 'var%d' % i)

하는리스트/튜플 인덱스에 넣어 당신이 반복적으로 StringVar의이 방법을 얻고 싶었다 경우

은 ... 몇 가지 옵션이있다 어느 한 쪽. self.*을 사용하면 클래스 네임 스페이스에 포함될 것이기 때문에 imo는 중복되지만 dict 인덱스를 사용하십시오. 위의 코드를 사용할 수 있습니다. 항목이 비어있는 경우 당신은 또한 당신의 명령을 잘못 설정하는

심지어 제대로 StringVar의의를가 갱신 부동 소수점 변환을 보장하지 않도록 사용 ... 그들은 여전히 ​​... 비어있을 수 있습니다. command=self.calc(). 이것은 이고 함수를 호출하고 명령으로 리턴하는 것을 설정하는 것은입니다. 사용 command=self.calc

+0

당신이 "self.var"까지 8 증분 말해 줄 수 주시겠습니까 – Ahmad

+0

고맙습니다. @Pythonista :) – Ahmad

+0

감사합니다. – Ahmad

관련 문제