Python/xldr: как извлечь данные из файла excel с помощью переменной raw_input?

Итак, я пытаюсь сделать простой баллистический калькулятор для игры Arma 3 с помощью Python 2.7 и файла Excel. Намерение состоит в том, чтобы сделать простую программу, которая запускается в терминале и запрашивает данные, связанные с выстрелом, который вы пытаетесь рассчитать, и выводит значение, равное задержке mil-dot (точки в снайперском прицеле). нужно для удачного выстрела в створ. Ссылка с таблицей примеров подробно объяснит, что это значит. Это довольно просто.

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

то есть горизонтальное расстояние = диапазон * cos (угол)

горизонтальное расстояние - обнуление = hold_over_variable_x ;

затем используйте таблицу с этой страницы Steam, чтобы получить другую переменную, используемую для расчета удержания. . В этом примере таблица винтовки M320 LRR, которая будет сохранена в файле Excel. (Я хотел бы добавить больше винтовок в будущем и использовать переменную raw_input для выбора соответствующего листа Excel)

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

например обнуление = 1000

диапазон = 1125

угол = 15,5

горизонтальное расстояние = 1125, потому что (15,5) = 1100

горизонтальное расстояние - обнуление = 100 = hold_over_variable_x

Hold_over_variable_y = -1,5 (проанализировано из файла Excel с использованием обнуляющей переменной)

удержание_овер = 100 * -1,5 = -150

Hold_over в идеале будет печататься как -1,5.

Вот мой код на данный момент, извините за плохое форматирование *edit; правильное форматирование исходного кода:

zeroing = int(raw_input("Zeroing?"))

designator_range = int(raw_input("Range?"))

angle = float(raw_input("Angle?"))

from math import cos, radians

horizontal_distance = designator_range * cos (radians(angle))

import xlrd

workbook = xlrd.open_workbook('mildot_arma.xls')

worksheet = workbook.sheet_by_name('M320')

hold_over_variable_x = horizontal_distance - zeroing

if zeroing == 300:

    hold_over_variable_y == sheet.cell(1,1).value

elif zeroing == 400:

    hold_over_variable_y == sheet.cell(2,1).value

elif zeroing == 500:

    hold_over_variable_y == sheet.cell(3,1).value

elif zeroing == 600:

    hold_over_variable_y == sheet.cell(4,1).value

elif zeroing == 700:

    hold_over_variable_y == sheet.cell(5,1).value

elif zeroing == 800:

    hold_over_variable_y == sheet.cell(6,1).value

elif zeroing == 900:

    hold_over_variable_y == sheet.cell(7,1).value

elif zeroing == 1000:

    hold_over_variable_y == sheet.cell(8,1).value

elif zeroing == 1100:

    hold_over_variable_y == sheet.cell(9,1).value

elif zeroing == 1200:

    hold_over_variable_y == sheet.cell(10,1).value

elif zeroing == 1300:

    hold_over_variable_y == sheet.cell(11,1).value

elif zeroing == 1400:

    hold_over_variable_y == sheet.cell(12,1).value

elif zeroing == 1500:

    hold_over_variable_y == sheet.cell(13,1).value

else:
    hold_over_variable_y = sheet.cell(14,1).value

hold_over = hold_over_variable_x * hold_over_variable_y

print hold_over

Я получаю ошибки:

Using variable 'hold_over_variable_y' before assignment 
Undefined variable 'sheet'

Начиная с того момента, когда я нажимаю функции if.

Я супер нуб в этом. Извините за гигантский пост. Любая помощь или совет очень ценятся!

*Редактировать №2:

Ларс точно знал, что мне нужно исправить. Я использовал == в тех местах, где должен был использовать =, и мне нужно было изменить sheet.cell на worksheet.cell. Это мой первый реальный проект, который может быть полезен для меня, и я немного горжусь им. Спасибо за помощь.

Вот код, как он есть сейчас. Попробую поставить все это под пока True: надеясь, что это позволит мне вводить новые данные и рассчитывать следующий выстрел, не закрывая терминал.

#Horizontal distance and Mil-dot Hold Calculator for M320 in Arma 3

#Asks for ballistic data to assign values to variables that will be used in range and mil-dot calculations
zeroing = int(raw_input("Zeroing?"))
designator_range = int(raw_input("Range?"))
angle = float(raw_input("Angle?"))

#Imports cos and radians from math module
from math import cos, radians

#Trigonometric, horizontal distance calculation. Converts angle to radian and multiplies its cosine with the designator range.
horizontal_distance = designator_range * cos (radians(angle))

#Imports excel workbook, 'mildot_arma.xls", worksheet 'M320'. A mil-dot balistics table for the M320 to be used in hold over calculation
import xlrd
workbook = xlrd.open_workbook('mildot_arma.xls')
worksheet = workbook.sheet_by_name('M320')

#Beginning of Mil-dot calculation process

#Creates hold over variable_x from distance minus zeroing to be calculated with sheet
hold_over_variable_x = horizontal_distance - zeroing

#Parses hold over variable_y from sheet to be calculated with previous variable, (the most complicated part)
if zeroing == 300:
    hold_over_variable_y = worksheet.cell(1,1).value
elif zeroing == 400:
    hold_over_variable_y = worksheet.cell(2,1).value
elif zeroing == 500:
    hold_over_variable_y = worksheet.cell(3,1).value
elif zeroing == 600:
    hold_over_variable_y = worksheet.cell(4,1).value
elif zeroing == 700:
    hold_over_variable_y = worksheet.cell(5,1).value
elif zeroing == 800:
    hold_over_variable_y = worksheet.cell(6,1).value
elif zeroing == 900:
    hold_over_variable_y = worksheet.cell(7,1).value
elif zeroing == 1000:
    hold_over_variable_y = worksheet.cell(8,1).value
elif zeroing == 1100:
    hold_over_variable_y = worksheet.cell(9,1).value
elif zeroing == 1200:
    hold_over_variable_y = worksheet.cell(10,1).value
elif zeroing == 1300:
    hold_over_variable_y = worksheet.cell(11,1).value
elif zeroing == 1400:
    hold_over_variable_y = worksheet.cell(12,1).value
elif zeroing == 1500:
    hold_over_variable_y = worksheet.cell(13,1).value
else:
    hold_over_variable_y = worksheet.cell(14,1).value

#Calculates mil-dot hold over from variables, and assigns mil-dot hold over value
hold_over = hold_over_variable_x * hold_over_variable_y

#Prints final hold over calculation
print hold_over

person Aaron Gaines    schedule 03.02.2018    source источник
comment
Пожалуйста, отформатируйте код правильно. Для этого есть специальная кнопка в интерфейсе редактирования.   -  person Norrius    schedule 03.02.2018


Ответы (1)


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

Переменная hold_over_variable_y также не определена до того, как вы ее используете. Дайте ему значение, прежде чем сравнивать его с чем-то.
напр. здесь: hold_over_variable_y == sheet.cell(1,1).value
Как узнать, истинно это или ложно, если Hold_over_variable_y не имеет значения?

person Lars    schedule 03.02.2018
comment
Ты жжешь! Это именно то, что мне нужно было изменить. Я отредактировал свой вопрос с фиксированным кодом. Это мой первый проект, который я когда-либо делал в кодировании, поэтому я очень ценю помощь. - person Aaron Gaines; 03.02.2018