Если при вводе melt
пользователь вводит число, например 1541, тогда переменная melt
будет содержать целое число, 1541. Однако ваш listA
элементов содержит список из 3 элементов, строку и2 целых числа
Таким образом, когда вы проверяете, находится ли melt
в listA
, он ничего не находит, потому что сравнение 1541
с ["scandium", 1541, 2830]
вернет False, поскольку оба не равны.
Кроме того, использование списка для хранения элементов и их точки кипения не является идеальным. К примеру, трудно получить доступ к точке кипения элементов, так как она находится в списке. Реализация словаря, или, что еще лучше, реализация фрейма данных (см. Pandas) будет намного более эффективной.
Чтобы вернуться к вашему коду, вот быстрое исправление:
for w in listA:
if melt == w[1] and boil == w[2]:
print("Is", w[0], "your chosen element?")
НаконецВы также должны иметь дело с проверкой ошибок ввода, чтобы подтвердить, что пользователь вводит правильные данные.
Редактировать: словари
С помощью словаря вы можете связать ключ сценность. Ключ и значение могут быть любыми: число, список, объекты, словари. Единственное условие - для ключа должен быть определен метод hash()
.
Например, вы можете сохранить элементы со строкой в качестве ключа, а 2 температуры - в качестве значений.
elements = {"scandium": (1541, 2830), "titanium": (1668, 3287)}
Чтобы получить доступ к элементам, вы звоните elements["scandium"]
, который вернется (1541, 2830). Вы также можете получить доступ к элементам словаря с 3 функциями:
elements.keys()
: вернуть ключи elements.values()
: вернуть значения elements.items()
: вернуть кортежи (ключ, значение)
Однако, опять же, нелегко получить доступ к отдельным температурам. Но на этот раз вы можете сравнить это следующим образом:
for key, value in elements.items():
if (melt, boil) == value:
print (key)
Но даже лучше, поскольку вы ищете элемент по температуре плавления и кипения, вы можете создать следующий словарь, где ключи являются кортежем (кипения, плавления) и значением является соответствующий элемент.
elements = {(1541, 2830): "scandium", (1668, 3287): "titanium"}
Затем, как только пользователь введет melt
и boil
, вы можете найти соответствующий элемент с помощью: elements[(melt, boil)]
. На этот раз нет необходимости использовать цикл. Соответствующий элемент может быть непосредственно доступен. Аналогичная реализация может быть реализована с фреймом данных pandas.
Наконец, вы также можете реализовать это с помощью класса.
class Element:
def __init__(self, name, melt, boil):
self.name = name
self.melt = melt
self.boil = boil
elements = [Element("scandium", 1541, 2830), Element("titanium", 1668, 3287)]
Как таковой, класс Element
использовать нельзякак ключ словаря. Чтобы его можно было использовать в качестве ключа, необходимо определить метод hash
.
class Element:
def __init__(self, name, melt, boil):
self.name = name
self.melt = melt
self.boil = boil
def __key(self):
return (self.name, self.melt, self.boil)
def __hash__(self):
return hash(self.__key())
Но, опять же, не так просто получить доступ к элементу из переменных melt
и boil
. Цикл снова необходим.