Пользовательские форматы номеров - PullRequest
0 голосов
/ 27 января 2019

У меня есть немного кода, который в настоящее время настроен для запуска набора уравнений. Я хотел бы разрешить ввод пользовательской числовой последовательности. Вместо ввода 100 я хотел бы ввести 1 + 00, но я хотел бы, чтобы код интерпретировал его как 100. После запуска уравнений мне бы хотелось, чтобы код возвращал результаты в формате X + XX.

Я новичок в кодировании (это мой первый кусочек кода) и искал способ найти способ отформатировать это. Я знаю, в Excel, я могу указать пользовательский формат чисел "# + ##. 00", чтобы он выводил ячейку в нужном мне формате. Мне не удалось найти эквивалент Python.

from tkinter import *
from math import *

def show_entry_fields():
     try:
          a, c, d, e, = float(e1.get()), float(e3.get()), float(e4.get()), float(e5.get())
          b = e - d
          s = (a + b + c) / 2
          height = (sqrt (s * (s - a) * (s - b) * (s - c)) * 2) / b
          height = float(format(height, '.3f'))
          height_label['text'] = str(height)
          side =((sqrt ((a ** 2) - (height ** 2))) + b)
          side = float(format(side, '.3f'))
          side_label['text'] = str(side)
     except ValueError:
          pass
     master.after(100, show_entry_fields)

master = Tk()
master.attributes("-topmost", True)
master.title("Triangulation Plotting")

Label(master, text="Measurement #1 Station Line Location").grid(row=1, column=0, sticky=W, pady=4)
e4 = Entry(master)
e4.grid(row=1, column=1, sticky=E)

Label(master, text="Triangulation Measurement #1").grid(row=2, column=0, sticky=W, pady=4)
e1 = Entry(master)
e1.grid(row=2, column=1, sticky=E)

Label(master, text="Measurement #2 Station Line Location").grid(row=3, column=0, sticky=W, pady=4)
e5 = Entry(master)
e5.grid(row=3, column=1, sticky=E)

Label(master, text="Triangulation Measurement #2").grid(row=7, column=0, sticky=W, pady=4)
e3 = Entry(master)
e3.grid(row=7, column=1, sticky=E, pady=4)

Label(master, text="Offset from station line").grid(row=8, column=0, sticky=W, pady=4)
height_label = Label(master, text="")
height_label.grid(row=8, column=1)

Label(master, text="Measurement on Station Line").grid(row=9, column=0, sticky=W, pady=4)
side_label = Label(master, text="")
side_label.grid(row=9, column=1)

master.after(100,show_entry_fields)
master.mainloop()

Пропущенные разделы являются полями ввода. Математика и все выходит именно так, как нужно. Запись X + XX - это формат, который используется для конкретного приложения, для которого оно предназначено. Я посмотрел в str.format () под документами, но не увидел, как я мог это сделать.

EDIT: Поэтому, если я введу 2 + 66, он будет интерпретирован как 266. Он проведет вычисления на основе других входных данных, и результат будет показан в том же формате. Для чисел меньше 100 или 1 + 00 он будет выводиться с начальным 0, то есть 0 + 57 для 57. Записи и результаты будут в плавающей запятой. Все результаты будут загружены в 2 десятичных знака.

1 Ответ

0 голосов
/ 27 января 2019

Для строк, разделенных на '+' и '.', построить число с помощью f-строки;превратить его в поплавок и закруглить.Для числа с плавающей запятой, округленного до требуемой точности, превратитесь в строку, разделите ее на '.', затем создайте с помощью f-строки.

def convert(thing):
    if isinstance(thing, str):
        a,b = thing.split('+')
        b,*d = b.split('.')
        d = '00' if not d else d[0]
        thing = round(float(f'{a}{b}.{d}'), 2)
    elif isinstance(thing, (int,float)):
        thing = str(round(thing, 2))
        thing,*d = thing.split('.')
        d = '00' if not d else d[0]
        thing = thing if len(thing) > 2 else '0'+thing
        thing = f'{thing[:-2]}+{thing[-2:]}.{d}'
    return thing

Python 3.6 необходим для f-строк

Для Python 3.5 - используйте форматирование строки:

thing = round(float('{}{}.{}'.format(a,b,d)), 2)
# and
thing = '{}+{}.{}'.format(thing[:-2],thing[-2:],d)

Использование
Строки в числа:

>>> convert('2+66')
266.0
>>> convert('0+22')
22.0
>>> convert('2+66') + convert('0+22')
288.0
>>> x = '223+56.666'
>>> convert(x)
22356.67
>>> y = '-54+22.33212'
>>> convert(y)
-5422.33
>>> 

Числа в строки

>>> convert(22)
'0+22.00'
>>> convert(23454.22123)
'234+54.22'
>>> convert(-56732)
'-567+32.00'
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...