0
0 комментариев

Добрый день! Я написал калькулятор на Python 3.7.4, но возникла проблема с подсчетом синуса и косинуса. Получается считать значение только от приближенных значений(3, 1,5), т.е на ключевых точках Pi, Pi/2 и тд он не считает, помоги исправить. [apcode language=»python»]

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
import math
import sys
 root = Tk()
root.title("Calculator")
#root.geometry("300x250")
 bttn_list = [ #состав кнопок
"AC", "±", "π", "/",
"7", "8", "9", "*",
"4", "5", "6", "-",
"1", "2", "3",  "+",
"0", ".", "=",  "√",
"n!", "cos", "sin","xⁿ",
"(",")","Exit", ] 
 r = 1 #задание размеров и внешнего вида
c = 0
for i in bttn_list:
    rel = ""
    cmd=lambda x=i: calc(x)
    ttk.Button(root, text=i, command = cmd, width = 3).grid(row=r, column = c, ipady=12)
    c += 1
    if c > 3:
        c = 0
        r += 1
 calc_entry = Entry(root, width = 25) #Задание размеров поля ENTER
calc_entry.grid(row=0, column=0, columnspan=5)
 # ограничивает количество знаков после запятой
def limiter(number):
    x = 0  # если нет знаков после запятой они не будут отображаться
      lim = 5  # количество знаков после запятой {:.8f}
    form = '{:.' + str(lim) +'f}'
      # если есть знаки после запятой
    if '.' in str(number):
        # считаем их
        x = len(str(number).split('.')[1])
      # если их меньше или равно lim
    if x <= lim:
        # то выводим число с его точностью
        form = '{:.' + str(x) +'f}'
      return form.format(number)
 def calc(key):     #функции кнопок
    global memory 
    if key == "=":
        str1 = "-+0123456789.*/)(" 
        if calc_entry.get()[0] not in str1:
            calc_entry.insert(END, "First symbol is not number!")
            messagebox.showerror("Error!", "You did not enter the number!")
        try:                                                #исчисления
            result = eval(calc_entry.get())
            calc_entry.insert(END, "=" + limiter(result))
        except:
            calc_entry.insert(END, "Error!")
            messagebox.showerror("Error!", "Check the correctness of data")
    elif key == "AC":
        calc_entry.delete(0, END)
             elif key == "±":
        if "=" in calc_entry.get():
            calc_entry.delete(0, END)
        try:
            if calc_entry.get()[0] == "-":
                calc_entry.delete(0)
            else:
                calc_entry.insert(0, "-")
        except IndexError:
            pass
    elif key == "π":
            calc_entry.insert(END, math.pi)
    elif key == "Exit":
            root.after(1,root.destroy)
            sys.exit
    elif key == "xⁿ":
            calc_entry.insert(END, "**")
    elif key == "sin":
            calc_entry.insert(END, "=" + limiter(math.sin(int(calc_entry.get()))))
    elif key == "cos":
            calc_entry.insert(END, "=" + limiter(math.cos(int(calc_entry.get()))))
    elif key == "(":
            calc_entry.insert(END, "(")
    elif key == ")":
            calc_entry.insert(END, ")")
    elif key == "n!":
            calc_entry.insert(END, "=" + limiter(math.factorial(int(calc_entry.get()))))
    elif key == "√":
            calc_entry.insert(END, "=" + limiter(math.sqrt(int(calc_entry.get()))))
    else:
            if "=" in calc_entry.get():
                calc_entry.delete(0, END)
            calc_entry.insert(END, key)
root.mainloop()

[/apcode]


Добавить комментарий