Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 6, 2014 19:43:25

destik123
Зарегистрирован: 2014-10-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Квадратное уравнение

Мне нужно чтобы длина числа(строки) при вводе в переменные (a, b, c) была не больше 5. Т.е. если пользователь вводит больше 5 символов писало “Слишком большое значение, повторите ввод”.

print ('Добро пожаловать в программу для решения квадратных уравнений')
print ('\n')
import math
 
def discriminant(a, b, c):        
    return b**2 - 4*a*c
 
def correct_input():
    while True:
        try:                      
            a = int(input('Введите a: '))
            b = int(input('Введите b: '))
            c = int(input('Введите c: '))
            return a, b, c        
        except ValueError:        
            print("Введите число")
 
while(True):
    a, b, c = correct_input()
    D = discriminant(a, b, c)
    print('D = ', D)
    if a == 0 and b == 0 and c == 0:                                        
        print ('Перменные могут принимать любое значение') 
    elif a == 0 and b == 0:                                               
        print ('Некорректное значение данных ')
    elif a == 0:                                                          
        print ('x=',(c/b))    
 
    if D < 0:
        print('Дискриминант отрицательный и не имеет корней')              
    elif D == 0:
        root = (-b) / (2 * a)
        print('Это уравнение имеет только один корень' ,root,)             
    else:
        discRoot = math.sqrt(D)
        root1 = round((-b + discRoot) / (2 * a), 2)
        root2 = round((-b - discRoot) / (2 * a), 2)
        print('Это уравнение имеет 2 корня' ,root1, 'и' ,root2)            
    if input("Решить уравнение еще раз?(y/n) - ") != 'y':
        break     

Эксперты, хелп)

Офлайн

#2 Окт. 6, 2014 20:12:00

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Квадратное уравнение

переменные (a, b, c) перевести в строку, найти длину и сравнить с 5

In [1]: a, b = 11, 111111111
In [2]: len(str(a)) > 5
Out[2]: False
In [3]: len(str(b)) > 5
Out[3]: True



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Окт. 6, 2014 20:36:21

destik123
Зарегистрирован: 2014-10-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Квадратное уравнение

Чет не понял… Можно по подробнее или в моей коде измени пожалуйста.

Офлайн

#4 Окт. 6, 2014 20:41:41

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Квадратное уравнение

Мой пример довольно прост, что именно в нем не понятно? Не понятно что делает len, str?



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#5 Окт. 6, 2014 21:09:56

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Квадратное уравнение

def correct_input():
    result = []
    for var in 'abc':
        query = 'Введите {0} :'.format(var)
        while True:
            try:
                x = int(input(query))
                assert abs(x) <= 99999
                result.append(x)
                break
            except ValueError:
                query = 'Нужно число. Введите {0} :'.format(var)
            except AssertionError:
                query = 'Слишком много разрядов. Введите {0} :'.format(var)
    return result

Отредактировано dimy44 (Окт. 6, 2014 21:18:01)

Офлайн

#6 Окт. 7, 2014 10:42:57

destik123
Зарегистрирован: 2014-10-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Квадратное уравнение

dimy44
Всё отлично работает. Но теперь если любую переменную переменную вести ноль, то выходит ошибка
Traceback (most recent call last):
File “D:\Python\ad1.py”, line 45, in <module>
root1 = round((-b + discRoot) / (2 * a), 2)
ZeroDivisionError: float division by zero

Офлайн

#7 Окт. 7, 2014 11:16:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Квадратное уравнение

destik123, тебя научить пользоваться гугл-транслейтом?



Офлайн

#8 Окт. 7, 2014 12:37:34

destik123
Зарегистрирован: 2014-10-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Квадратное уравнение

Мне важнее исправить эту проблемму

Офлайн

#9 Окт. 7, 2014 14:23:13

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Квадратное уравнение

Ну не любую, а только “а”. Похоже, код не ваш, раз вы такие вопросы задаёте… Да ну ладно

def correct_input():
    result = []
    for var in 'abc':
        query = 'Введите {0} :'.format(var)
        while True:
            try:
                x = int(input(query))
                if var == 'a' and x == 0:
                    query = 'Переменная a не может быть равна нулю. Введите ещё раз a :'
                elif abs(x) > 99999:
                    query = 'Слишком много разрядов, можно не более пяти. Введите ещё раз {0} :'.format(var)
                else:
                    result.append(x)
                    break
            except ValueError:
                query = 'Нужно число. Введите ещё раз {0} :'.format(var)
    return result

Отредактировано dimy44 (Окт. 7, 2014 16:33:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version