Программа |
Вот такое понаписал. Добавить нечего, кроме Qt-морды. Но это потом, когда комп будет.
#-*-coding:utf8;-*-
# ver. 2.31
# Программа рассчитывает скорость или время свободного падения из пользовательского ввода. Автоматически корректирует введенные данные. Например убирает лишние точки, заменяет запятые точками. Если ввод содержит некорректные символы (буквы и пунктуацию), выдаёт ошибку и предлагает повторить ввод.
# Как и все мои программы работает ТОЛЬКО в оффлайне, потому что содержит символы кириллицей.
import math
def finput ():
g = 9.8
a = input("Введите высоту падения в метрах \nили Enter, если хотите вычислить \nскорость по времени: \n> ")
a = zap2point(a)
if len(a) > 0:
h = number_test(a)
if h == "error":
finput ()
else:
h = float (h)
u = math.sqrt(2*g*h)
t = u / g
u2 = u * 3.6
print ("Конечная скорость падения: \n{} м/с \n{} км/ч \n{} м за {} сек.".format (fr(u), fr(u2), fr(h), fr(t)))
else:
a = input("Введите время падения в секундах: \n> ")
a = zap2point(a)
t = number_test(a)
if t == "error":
finput ()
else:
t = float (t)
u = g * t
h = (u * t) / 2
u2 = u * 3.6
print ("Конечная скорость падения: \n{} м/с \n{} км/ч \n{} м за {} сек.".format (fr(u), fr(u2), fr(h), fr(t)))
def number_test (a):
b = ""
# Если число точек в строке больше 1
# запоминаем индекс первой точки.
if a.count (".") > 1:
pindex = a.index(".")
else:
pindex = len (a) + 2
if len(a) == 0:
b = "error"
return b
else:
# Перебираем все символы строки
# Если символ число или точка, продолжаем
# Если символ точка и его индекс больше
# индекса первой точки, пропускаем его
# Если символ не число и не точка -
# обрываем цикл
for char in a:
if char in ("1234567890."):
if char == "." and len (b) > pindex:
continue
b += char
else:
print ("***********************\nОшибка! Введите целое или \nвещественное число, \nнапример 34 или 45.6\n***********************")
b = "error"
break
if b == ".":
print ("***********************\nОшибка! Введите целое или \nвещественное число, \nнапример 34 или 45.6\n***********************")
b = "error"
return b
# Так как питон иногда отображает
# натуральные числа некрасиво, например
# 3.2999999999 вместо 3.3, я написал
# функцию,которая более и менее корректно
# окугляет число перед выводом на экран.
def fr (x):
if x >= 10000:
x = int(math.modf(x)[1])
elif x >= 999:
x = "{:.5}".format(x)
elif x <= 0.0001:
x = "{:.10}".format(x)
elif x >= 99.9:
x = "{:.4}".format(x)
else:
x = "{:.3}".format(x)
return x
# Так как часто при вводе числа хочется
# вместо точки поставить запятую, эта
# функция заменяет все запятые точками
# и удаляет пробелы
# чтобы избежать ошибок при вычислении
def zap2point (h):
y = ""
for char in h:
if char == ",":
char = "."
elif char == " ":
continue
y += char
return y
# собственно, запускаем программу
finput()
Рубрики: | кодинг |
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |
x = int(math.modf(x)[1])
def zap2point (h)
Ответ на комментарий _DOOMer_
Да, есть различные методы обрезать дробную часть, но во-первых, round делает это не во всех интерпреторах правильно. А во-вторых, я хотел попробовать вши, которыми ещё не пользовался. Мне кажется math.modf довольно простой и надёжный.Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |