Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.05.2018
Сообщений: 2
1

Sqrt() сам округляет числа ¯\_(ツ)_/¯

18.06.2019, 01:28. Показов 2076. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, сделал подобие калькулятора и в ходе теста обнаружил, что при извлечении корня из целого числа происходит округление. К примеру, "sqrt 3" выводит 2. У меня ступор. Где я тупой?

Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from math import floor, sqrt
 
print("Enter expression (separate by spaces) using following mathematical signs \ key words:\n\n[+] - addition\n[-] - subtraction\n[*] - multiplication\n[/] - division\n[%] - remainder of division\n[^] - exponentiation\n[!] - factorial\n[sqrt] - square root\n\nExamples: 2 + 2, sqrt 4, 3!\n")
 
while 1:
    factnum = 0
    factflag = False
    sign = ""
    while 1:
        try:
            enter = input()
 
            for i in range(len(enter)):
                if enter[i] == "!" and i == len(enter) - 1:
                    factnum = int(enter[:i])
                    factflag = True
                    break
            if (factflag):
                tmp = 1
                for i in range(1, factnum + 1):
                    tmp *= i
                print("=", tmp, end="\n\n")
                break
 
            if enter[:5] == "sqrt ": # странные вещи происходят вот здесь
                numsqrt = float(enter.split()[1])
                if floor(numsqrt) == numsqrt:
                    print("=", "%.0f" % sqrt(numsqrt), end="\n\n")
                    break
                else:
                    print("=", sqrt(numsqrt), end="\n\n")
                    break
 
            num1 = float(enter.split()[0])
            sign = enter.split()[1]
            if sign != "+" and sign != "-" and sign != "*" and sign != "/" and sign != "%" and sign != "^":
                raise ValueError
            num2 = float(enter.split()[2])
            break
        except (ValueError, IndexError):
            print("\nPlease enter correct expression separating numbers by spaces\n")
    if sign == "+":
        if floor(num1 + num2) == num1 + num2:
            print("=", "%.0f" % (num1 + num2), end="\n\n")
        else:
            print("=", num1 + num2, end="\n\n")
    elif sign == "-":
        if floor(num1 - num2) == num1 - num2:
            print("=", "%.0f" % (num1 - num2), end="\n\n")
        else:
            print("=", num1 - num2, end="\n\n")
    elif sign == "*":
        if floor(num1 * num2) == num1 * num2:
            print("=", "%.0f" % (num1 * num2), end="\n\n")
        else:
            print("=", num1 * num2, end="\n\n")
    elif sign == "/":
        if floor(num1 / num2) == num1 / num2:
            print("=", "%.0f" % (num1 / num2), end="\n\n")
        else:
            print("=", num1 / num2, end="\n\n")
    elif sign == "%":
        if floor(num1 % num2) == num1 % num2:
            print("=", "%.0f" % (num1 % num2), end="\n\n")
        else:
            print("=", num1 % num2, end="\n\n")
    elif sign == "^":
        if floor(num1 ** num2) == num1 ** num2:
            print("=", "%.0f" % (num1 ** num2), end="\n\n")
        else:
            print("=", num1 ** num2, end="\n\n")
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2019, 01:28
Ответы с готовыми решениями:

Определите число, для получения которого из числа 1 существует 175 программ
Есть задача: Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды,...

Как сделать так чтобы в tetxbox1 выводились числа от одного до 175 но при условии того что я должен нажать 175 раз на
Как сделать так что бы в tetxboxs1 выводиллись числа от одного до 175 но при условий того что я...

Используя комбинацию CAR и CDR, выбрать из списка ((HEIGHT 72) (WEIGHT 175) (HAIR BLOND)) элемент 175 2
Доброе утро. Помогите с решением вот такой вот задачи 1. Используя комбинацию CAR и CDR, выбрать...

Масштабирование фона 175%+
Есть фон, при масштабировании от 100% до 25% он растягивается отлично, но если задать масштаб свыше...

Ищу клавиатуру CBR KB-175
Где найти такую клавиатуру (первое фото)? Сколько бы я не заказывал, вместо первого фото,...

2
1042 / 577 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
18.06.2019, 01:41 2
Лучший ответ Сообщение было отмечено ExyK как решение

Решение

28 строка. попробуйте, например.
Python
1
print("=", "%.2f" % sqrt(numsqrt), end="\n\n")
1
0 / 0 / 0
Регистрация: 11.05.2018
Сообщений: 2
18.06.2019, 01:59  [ТС] 3
Спасибо большое, в очередной раз невнимательность

Добавлено через 10 минут
Python
1
if floor(sqrt(numsqrt)) == sqrt(numsqrt):
Вот так это должно было быть
0
18.06.2019, 01:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2019, 01:59
Помогаю со студенческими работами здесь

Вычислить Функцию y=ln(x+V¯x) ; на отрезке [0,8;2П] с шагом h=0,1
Народ подскажите пожалуйста с Паскалем в Школе еще шарил более менее сходил в армию ваще отупел и...

Java Developer (г. Королёв), 175-300К
В российский офис компании Wiley (крупная американская издательская компания, www.wiley.com)...

Java Developer, Королев\Москва, 175 - 300К
В российский офис компании Wiley (крупная американская издательская компания, www.wiley.com)...

Где найти дампы для экзамена 70-175?
Добрый день! Подскажите, где можно найти дампы для экзамена 70-175 (VB и distributed...

Java Developer, Королев\Москва, 175 - 300К
В российский офис компании Wiley (крупная американская издательская компания, www.wiley.com)...

Есть ли у кого вопросы к MS экзаменам по VB6 (70-175 и 70-176)
Есть ли у кого информация о вопросах на microsoft экзаменах по VB6 или дайте ссылку где есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru