Python / xldr:如何使用 raw_input 变量从 excel 文件中提取数据?

Python / xldr : How do I pull data from an excel file using a raw_input variable?

所以我正在尝试使用 python 2.7 和 excel 文件为游戏 Arma 3 制作一个简单的弹道计算器。目的是制作一个在终端中运行的简单程序,询问您要计算的镜头中涉及的数据,并输出一个等于 mil-dot hold over(狙击镜范围内的点)的值您需要成功射中目标。 link 以table 为例会详细说明这涉及到什么。很简单。

它涉及进行三角函数计算以找到到目标的真实水平距离。然后将该范围与 excel 文件中的一个值(解析?使用 xlrd)结合使用,该文件包含一个在保持计算中使用的变量。

即水平距离 = 范围 * cos(角度)

水平距离 - 归零 = hold_over_variable_x ;

然后使用 a table from this steam page 获取另一个用于保持计算的变量。在本例中,M320 LRR 步枪的 table,将保存在 excel 文件中。 (以后想加更多的步枪,用一个raw_input变量去挑对应的excel sheet)

归零将是一个通过 raw_input 分配的变量,并且需要从所述 table 中提取正确的值。

例如归零 = 1000

范围 = 1125

角度 = 15.5

水平距离 = 1125 cos(15.5) = 1100

水平距离 - 归零 = 100 = hold_over_variable_x

hold_over_variable_y = -1.5(使用归零变量从 excel 文件中解析)

hold_over = 100 * -1.5 = -150

hold_over 理想情况下打印为 -1.5。

这是我目前的代码,很抱歉格式不佳*编辑;初始代码的正确格式:

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 函数时开始。

我在这方面超级菜鸟。对不起巨人 post。非常感谢任何帮助或建议!

*编辑#2:

Lars 确切地知道我需要修复什么。在我应该使用 = 的地方使用了 ==,我需要将 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

正如错误告诉您的那样,您的代码中没有定义名为 sheet 的变量,但您正在调用 sheet 上的函数。 您可能需要重命名 sheet 才能工作sheet。

变量hold_over_variable_y在你使用之前也没有定义。在将它与某物进行比较之前,先给它一个值。
例如这里: hold_over_variable_y == sheet.cell(1,1).value
如果 hold_over_variable_y 没有值,你怎么知道这是对还是错?