Задать вопрос
@chvs777

Как привязать значение переменной к строчке/столбцу в эксель чтобы получить значение ячейки?

если ввожу возраст = 34 , стаж = 9 получаю пустую ячейку
а если возраст = 6 а стаж = 7 получаю нужное значение

elif command == "возраст":
age = int(input("Укажите возраст: "))
elif command == "стаж":
expirience = int(input("укажите ваш стаж: "))
cell = sheet.cell(age, expirience)
result = cell.value
print(result)

66c79b2c89e40989589415.png
  • Вопрос задан
  • 245 просмотров
Подписаться 2 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 3
@imba
"""
0) проблема твоей таблицы, в том что есть ячейки содержащие несколько значении и наити нужную можно только пройдя по ним и сравнивая целевое значение с теми что есть в ячейке , это долго тем более если несколько запросов от пользователя будет

1) правильнее будет прочитать таблицу, прочитать все значение и создать у себя удобную структуру с данными, что бы не читать эексель каждый раз.
три словарика например "возраст" "стаж" "коэффициент", быстрыи поиск по ключу то, что надо.
скорее всего есть более правильные и красивые структуры

2) НО если по какой-то не озвученной причине, важно читать напрямую, то либо брать значение ввода а потом искать в какой ячейке оно есть и запоминать индекс а дальше по наиденным индексам читать значение ячейки с коэффициентом

result = ws.cell(row=row_id, column=column_id).value

или можно так

создаешь словарь соответствия ввода пользователя индексам таблицы (если структура таблицы не изменяется. меняются только коэффициенты то можно руками прописать, если меняется то вначале читаешь фаил и делаешь словарь а потом по нему ищешь коэффициент, имеет смысл если запросов пользователя много)

"""

factory = {
"возраст":{18:3, 19:3, лет:номер_строки}
"стаж":{0:2, 1:3, 3:4, 4:4 , лет:номер_ряда }
}

command_row = input('введите команду и значение: ')
# например пользователь вводит
# возраст = 18

command = command_row.split('=')
# содержимое command = ['возраст ', ' 18']

#дальше обращаемся к нашим словарям по ключам и лучше через метод get наслучай если ввели что-то не то

row_id = factory.get(command_row[0].strip(),{}).get(int(command_row[1].strip()))

#равноценно factory["возраст"][18]
#даст тебе номер строки или столбца в зависимости от команды
#row_id , column_id значения которые вернет тебе этот словарь factory для команды возраст и стаж - неперепутаи)))

#получить само значение будет просто
#как тебе гпт написало, открываем фаил и таблицу а дальше берем наши индексы и читаем содержимое ячейки
result = ws.cell(row=row_id, column=column_id).value
Ответ написан
@chvs777 Автор вопроса
HELP = """
  help - напечатать справку по программе.
  мощьность - укажите мощьность автомобиля в л.с.
  кбм - укажите ваш кбм (скидка) - что бы узнать скидку пройдите по ссылке : 
  https://autoins.ru/osago/raschet-stoimosti-osago/proverit-kbm/.:
  
  квс - укажите ваш квс - что бы узнать скидку введите возраст и стаж.
  прописка - укажите населенный пункт.
  рассчитать - узнать стоимость полиса.
  возраст - укажите возраст.
  стаж - укажите стаж.
  """

import os

os.environ['PYTHONIOENCODING'] = 'utf-8'

import math

import openpyxl

file_path = "calc.xlsx"
wb = openpyxl.load_workbook(file_path)
sheet = wb["Лист1"]  
PRICE = [5600, ] 

   
run = True
while run : 
  command = input("Введите команду: ")
  if command == "help":
    print(HELP)
  elif command == "мощьность":
    HP = int(input("Укажите мощьность автомобиля в л.с. "))
    if HP <= 50 :
     PRICE.append(0.6)
    elif HP > 50 and HP <= 70 :
     PRICE.append(1)
    if HP > 70 and HP <= 100 :
     PRICE.append(1.1)
    elif HP > 100 and HP <= 120 :
     PRICE.append(1.2)
    if HP > 120 and HP <= 150 :
     PRICE.append(1.4)
    elif HP > 150 :
     PRICE.append(1.6)    
  if command == "кбм":
     kbm = float(input("Укажите ваш кбм (скидка): "))
     PRICE.append(kbm)
  elif command == "возраст":
      age = int(input("Укажите возраст: "))
  elif command == "стаж":
      expirience = int(input("укажите ваш стаж: ")) 
      cell = sheet.cell(age, expirience)
      result = cell.value
      print(result)          
  elif command == "прописка":
     terra = input("Укажите населенный пункт: ")
     PRICE.append(0.68)  
  elif command == "рассчитать" :
     print("Стоимость полиса :", math.prod(PRICE), "рублей") 
     break
Ответ написан
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
если ввожу возраст = 34 , стаж = 9 получаю пустую ячейку
а если возраст = 6 а стаж = 7 получаю нужное значение

Логично, потому-что функция:
cell = sheet.cell(age, expirience)
Интерпретирует передаваемые значения как координаты ячейки (то есть ровно так, как должна):
(исходники либы)
def cell(self, row, column, value=None):
        """

официальный туториал
d = ws.cell(row=4, column=2, value=10)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы