2016-09-20 2 views
0
from tkinter import * 
import math 
import sys 

def quit(): 
    root.destroy() 

def a_b_c(): 
    print_a() 
    print_b() 
    print_c() 
    calculation() 
    return 

def print_a(): 
    get_a = a.get() 
    printing_a = Label(root, text=get_a).grid(row=8, column=1) 
    return 

def print_b(): 
    get_b = b.get() 
    printing_b =Label(root, text=get_b).grid(row=12, column=1) 
    return 

def print_c(): 
    get_c = c.get() 
    printing_c =Label(root, text=get_c).grid(row=16, column=1) 
    return 


root = Tk() 
a = StringVar() 
b = StringVar() 
c = StringVar() 

root.title('Solving Quadratic Equations') 

quit_b = Button(root, text="quit",command=quit).grid(row=1, column=1) 
go_b = Button(root, text="go", command=a_b_c).grid(row=1, column=2) 
welcome = Label(root, text="Welcome to Solving Quadratic Equations with GlaDOS",font=("Helvetica",13)) 
welcome.grid(row=2, column=1) 


instructions = Label(root, text="So how do i use this program? is what you may ask yourself. So, for example, \n you have the equation 2x^2+5x+8=0. So the 2x^2 is a but you don't put the\n whole thing in you just but the 2 from the start in. The next thing is b\n in this case b = 5 and c is equal to 8. Once you have all you number in the boxes \n hit the go button. Remember you don't need the x's. ", font=("Helvetica",11)) 
instructions.grid(row=3, column=1) 

line = Label(root, text="************************************************************************************************************").grid(row=4, column=1) 

input_a = Label(root, text="Pls input A here", font=("Helvetica",11)).grid(row=6, column=1) 
entry_a = Entry(root,textvariable=a).grid(row=7,column=1) 

line = Label(root, text="************************************************************************************************************").grid(row=9, column=1) 

input_b = Label(root, text="Pls input B here", font=("Helvetica",11)).grid(row=10, column=1) 
entry_b = Entry(root,textvariable=b).grid(row=11,column=1) 

line = Label(root, text="*************************************************************************************************************").grid(row=13, column=1) 
input_c = Label(root, text="Pls input C here", font=("Helvetica",11)).grid(row=14, column=1) 
entry_c = Entry(root,textvariable=c).grid(row=15,column=1) 

two_a = a.get 
two_b = b.get 
two_c = c.get 

d = two_b**2-4*two_a*two_c 
def calculation(): 
    if d < 0: 
    no_solution = Label(root, text="This equation has no real solution").grid(row=19, column=1) 
    elif d == 0: 
    x = (-two_b+math.sqrt(two_b**2-4*two_a*two_c))/2*two_a 
    one_solution = Label(root, text="This equation has one solutions: {}".format(x)).grid(row=20, column=1) 
    else: 
    x1 = (-two_b+math.sqrt((two_b**2)-(4*(two_a*two_c))))/(2*two_a) 
    x1 = (-two_b-math.sqrt((two_b**2)-(4*(two_a*two_c))))/(2*two_a) 
    two_solution= label(root, text="This equation has two solutions: {} or {} ".format(x1,x2)).grid(row=21, colum=1) 

root.mainloop() 

Почему он говорит о неподдерживаемых типах операндов для ** или pow(): метод или int? может кто-то помочь мне изменить его, так что это работает для школы, и учитель не может мне помочь. Я пытаюсь сделать программу, которая помогает решать квадратные уравнения и часть в нижней работе доцента (расчет DEF) спасибо за помощь мне :)неподдерживаемый тип (-ы) операндов для ** или pow(): 'method' и 'int'

+0

В какой строке упоминается ошибка? –

+0

Код в 'вычислении' не имеет правильного отступа. –

ответ

2

Вы назначаете несколько значений:

two_a = a.get 
two_b = b.get 
two_c = c.get 

А потом делать расчеты:

d = two_b**2-... 

Однако a.get это метод, который возвращает значение этого StringVar. Для того, чтобы на самом деле назвать его и получить значение, вы должны ... ну, назовем его, в скобках:

two_a = a.get() 

Кроме того, вы затем строки. Cast их в целые числа или числа с плавающей точкой с int или float:

two_a = int(a.get()) 
# or: 
two_a = float(a.get()) 

Тогда ваша арифметика будет работать, как ожидалось.

0

Прочтите и изучите эту справочную страницу SO примерно mcves. Вот мкс на основе кода, который вы опубликовали. Он выводит то же самое сообщение об ошибке в последней строке.

import tkinter as tk 
root = tk.Tk() 
b = tk.StringVar(root) 
two_b = b.get 
d = two_b**2 

Поднятие метода к власти бессмысленно. Вам нужно вызвать() метод и преобразовать строку в число. Сделайте последнее либо с помощью DoubleVar, либо IntVar вместо StringVar, либо передав результат get to float() или int() перед выполнением арифметики.

Смежные вопросы