Найти - Пользователи
Полная версия: Квадратное уравнение
Начало » Центр помощи » Квадратное уравнение
1
destik123
Мне нужно чтобы длина числа(строки) при вводе в переменные (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     

Эксперты, хелп)
ajib6ept
переменные (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
destik123
Чет не понял… Можно по подробнее или в моей коде измени пожалуйста.
ajib6ept
Мой пример довольно прост, что именно в нем не понятно? Не понятно что делает len, str?
dimy44
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

destik123
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
FishHook
destik123, тебя научить пользоваться гугл-транслейтом?
destik123
Мне важнее исправить эту проблемму
dimy44
Ну не любую, а только “а”. Похоже, код не ваш, раз вы такие вопросы задаёте… Да ну ладно

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB