繁体   English   中英

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游戏制作一个简单的弹道计算器。 目的是制作一个简单的程序,在终端中运行,以询问您要计算的镜头所涉及的数据,并输出一个等于保留的密点(狙击范围内的点)的值。您需要成功击中目标。 带有示例表的链接将详细说明其涉及的内容。 这很简单。

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

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

水平距离-调零= hold_over_variable_x;

然后使用此Steam页面中的表格获取用于保持计算的另一个变量。 在此示例中,M320 LRR步枪的表将保存在excel文件中。 (我想在将来添加更多的步枪,并使用raw_input变量选择相应的Excel工作表)

归零将是通过raw_input分配的变量,从该表中提取正确的值是需要的。

例如,调零= 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。

这是我的当前代码,对不起* 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

如错误所指示,在代码中没有定义名为sheet的变量,但您正在Sheet上调用函数。 您可能需要将工作表重命名为工作表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM