Как решить TypeError: объект 'float' не повторяется в python - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь создать код, который будет решать для х, используя формулу квадратичного c. Для выходов я не хочу, чтобы он отображал мнимые числа ... только действительные числа. Я установил значение внутри квадрата root равным переменной, называемой "root", чтобы определить, будет ли это значение положительным / отрицательным (если оно отрицательное, то решение будет мнимым).

Это это код.

import math

print("Solve for x when ax^2 + bx + c = 0")

a = float(input("Enter a numerical value for a: "))
b = float(input("Enter a numerical value for b: "))
c = float(input("Enter a numerical value for c: "))

root = math.pow(b,2) - 4*a*c

root2 = ((-1*b) - math.sqrt(root)) / (2*a)
root1 = ((-1*b) + math.sqrt(root)) / (2*a)

for y in root1:
    if root>=0:
        print("x =", y)       
    elif root<0:
        print('x is an imaginary number')

for z in root2:
    if root>=0:
        print("or x =", z)
    elif root<0:
        print('x is an imaginary number')

Это код ошибки:

  File "/Users/e/Documents/Intro Python 2020/Project 1/Project 1 - P2.py", line 25, in <module>
    for y in root1:

TypeError: 'float' object is not iterable

Ошибка возникает в строке:

for y in root1:

Как исправить эту ошибку

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Я понимаю, что вы используете здесь уравнение квадратичного c. Итерируемый - это что-то вроде списка. Переменная с более чем 1 элементом. В вашем примере

root1 - это одно значение с плавающей точкой. root2 также является единственным значением с плавающей точкой. Для ваших целей вам не нужны ни строки с «для». Попробуйте удалить строки для y и z и запустить ваш код.

Чтобы помочь вам понять, значение с плавающей запятой - это просто число с десятичными числами.

0 голосов
/ 11 апреля 2020

Что ж, ошибка довольно очевидна: вы пытаетесь l oop над root1 и root2, которые являются числами с плавающей точкой, а не списками.

То, что вы хотели сделать вместо этого, просто используйте блоки if / else:

if root >= 0:
    print("x =", root1)
    print("x =", root2)
else:
    print("x is an imaginary number")
...