Повторная ошибка IndexError в терминале, вызванная исключением - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь решить задачу программирования, и у меня возникли проблемы.Задание гласит:

Рассмотрим обычную формулу для вычисления решения квадратного уравнения: ax2 + bx + c = 0, заданное как x = sqrt (b ± b ^ 2−4ac / 2a). Написать программу для чтения значений.для a, b и c из командной строки.Используйте исключения для обработки пропущенных аргументов и обработки неверного ввода, где b ^ 2-4ac <0 </p>

Моя программа выглядит следующим образом:

from math import sqrt

import sys

try:
    a = float(sys.argv[1])
    b = float(sys.argv[2])
    c = float(sys.argv[3])
    bac = b**2 - 4*a*c
    if bac < 0:
        raise ValueError
except IndexError:
    while True:
        input("No arguments read from command line!")
        a = float(input("a = ? "))
        b = float(input("b = ? "))
        c = float(input("c = ? "))
        bac = b**2 - 4*a*c
        if bac > 0:
            break
        if bac < 0:
            while True:
                print("Please choose values of a,b,c so\
                                         that b^2 - 4ac > 0")
                a = float(input("a = ? "))
                b = float(input("b = ? "))
                c = float(input("c = ? "))
                bac = b**2 - 4*a*c
                if bac > 0:
                    break
except ValueError: 
    while True:
        input("Please choose values of a,b,c so that b^2 - 4ac > 0")
        a = float(input("a = ? "))
        b = float(input("b = ? "))
        c = float(input("c = ? "))
        if bac > 0:
            break

for i in range(-1,2,2):     # i=-1, next loop > i=1
    x = (b + i*sqrt(bac)) / (2*a)
    print("x = %.2f"%(x))

Кажется, что работает нормально, но вв приведенном ниже примере это не так:

terminal >
python quadratic_roots_error2.py
No arguments read from command line!
a = ? 1
b = ? 1
c = ? 1
Please choose values of a,b,c so that b^2 - 4ac > 0
a = ? 5
b = ? 2
c = ? -3
No arguments read from command line!    
a = ? 5
b = ? 2
c = ? -3
x = -0.60
x = 1.00

Почему программа выдает сообщение «Нет аргументов, прочитанных из командной строки!»?Я хочу, чтобы программа печатала каждое решение, где b ^ 2-4ac> 0, и всякий раз, когда b ^ 2-4ac <0, я хочу сообщение «Пожалуйста, выберите значения a, b, c, чтобы b ^ 2 - 4ac> 0»быть напечатанным, как оно делает.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

IndexError, который вы получаете от вызова sys.argv[1], когда нет индекса с индексом 1.

Как упоминал Джон Гордон, sys.argv ищет входные данные, данные, когда сам скриптназывается.Так как в вызове нет аргументов, в данном случае python quadratic_roots_error2.py, то ничего не помещается в список sys.argv с индексом 1. Затем ваш сценарий выдает IndexError, который обнаруживается в вашем предложении Except IndexErrorи затем просматривая ту часть кода, которая запрашивает значения A, B и C. Самый быстрый способ решить вашу проблему - заменить:

a = float(sys.argv[1])
b = float(sys.argv[2])
c = float(sys.argv[3])

на:

a = float(input("a = ? "))
b = float(input("b = ? "))
c = float(input("c = ? "))

как и везде в вашем сценарии.

0 голосов
/ 21 сентября 2018

Спасибо за ответы!Я принял их во внимание, и теперь код выглядит так:

try:
    a = float(sys.argv[1])
    b = float(sys.argv[2])
    c = float(sys.argv[3])
except IndexError:
    input("No arguments read from command line!")
    a = float(input("a = ? "))
    b = float(input("b = ? "))
    c = float(input("c = ? "))
try:
    for i in range(-1,2,2):
        x = (b + i*sqrt(b**2 - 4*a*c)) / (2*a)
        print("x = %.2f"%(x))
except ValueError:
    while True:
        input("Please choose values a,b,c so that b**2 - 4*a*c > 0")
        a = float(input("a = ? "))
        b = float(input("b = ? "))
        c = float(input("c = ? "))
        if b**2 - 4*a*c > 0:
            for i in range(-1,2,2):
                x = (b + i*sqrt(b**2 - 4*a*c)) / (2*a)
                print("x = %.2f"%(x))
            sys.exit(1)
0 голосов
/ 19 сентября 2018

Почему программа выдает сообщение «Никаких аргументов не читается из командной строки!»?

Поскольку она пытается извлечь аргументы из командной строки, а их нет.

«Командная строка» - это команда, которую вы ввели для запуска программы:

python quadratic_roots_error2.py

Вы можете указать аргументы при вводе команды, например:

python quadratic_roots_error2.py 5 99 1000

Но вы этого не сделали, поэтому программа печатает это сообщение, а затем считывает ввод с клавиатуры.

Если вы не хотите, чтобы это сообщение было напечатано, почему это дажеесть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...