我用 c# 和 python 编写了一个计算器(我试图让 python 脚本也作为 Flask 应用程序工作,但这是另一个问题)。 该代码可以正常工作...
def calc():
#print ("executing calc()")
zem_a = (zone_n - 8);
if (zem_a <= 0):
#print ("call panel()")
panel()
else:
zem_a = ((zone_n - 1) / 8)
zem_aa = int(zem_a)
#print(zem_aa) #zem
zem_b = ((8 * zem_aa))
zem_bb = int(zem_b)
port_n = ((zone_n - zem_b)) #port
port_nn = int(port_n)
if (zem_bb == 0):
zem_bb = 1;
else:
zem_n = zem_aa - 1;
zem_nn = int(zem_n)
print("Zone", zone_n, "= Zem" , zem_nn, "Port", port_nn);
我想我实际上应该能够使用模数(%8)来避免 8 的所有除法然后乘以 8,但似乎无法让它以这种方式工作......有什么建议吗?
我需要的布局运行如下...... 前 8 个端口位于面板上(区域 1 至 8) 然后Zems从0向上运行,所以区域9是zem 0端口1,区域16是zem 0端口8。我有完整的工作代码,但认为模8可能是更好的数学,或者我只是挑剔哈哈。
这是我想出的,但 port_n 上 8 的倍数的工作方式并不相同,我不知道我做错了什么。当 port_n 需要为 8 时,似乎 8 的倍数的答案给出的 port_n 为 0。
def calc():
#print ("executing calc()")
zem_a = (zone_n - 8);
if (zem_a <= 0):
#print ("call panel()")
panel()
else:
zone_nn = int(zone_n)
#zone_nn = zone_nn - 1
zem_n = (((zone_n /8))%8)
zem_nn = int(zem_n)
#print (zem_nn)
port_n = (zone_nn - (8 * zem_nn))
#print (port_n)
#port_n = ((zone_n - zem_b)) #port
port_nn = int(port_n)
if (port_n == -1):
port_n = 8
else:
zem_n = zem_n -1
zem_nn = int(zem_n)
print("Zone", zone_n, "= Zem" , zem_nn, "Port", port_n);
您困惑的核心是模运算符提供从零 (0) 开始的范围内的余数,而您需要从一 (1) 开始的余数。将计算出的余数加一即可将余数范围从原来的0到7调整为端口号需要的1到8。
查看下面的代码,看看其结果为端口号提供了正确的结果:
def calc():
#print ("executing calc()")
#zem_a = (zone_n - 8);
#if (zem_a <= 0):
if (zone_n < 9):
print (f"Zone {zone_n:02d} -> call panel()")
#panel()
else:
zem_nn, port_nn = divmod(zone_n-9, 8)
port_nn+=1 # turn 0-7 into 1 to 8
# zem_a = ((zone_n - 1) / 8)
# zem_aa = int(zem_a)
# #print(zem_aa) #zem
# zem_b = ((8 * zem_aa))
# zem_bb = int(zem_b)
#
# port_n = ((zone_n - zem_b)) #port
# port_nn = int(port_n)
#
# if (zem_bb == 0):
# zem_bb = 1;
# else:
# zem_n = zem_aa - 1;
# zem_nn = int(zem_n)
#
print(f"Zone {zone_n:02d} = Zem {zem_nn} Port {port_nn}")
for zone_n in range(1,20):
calc()
# Zone 01 -> call panel()
# Zone 02 -> call panel()
# Zone 03 -> call panel()
# Zone 04 -> call panel()
# Zone 05 -> call panel()
# Zone 06 -> call panel()
# Zone 07 -> call panel()
# Zone 08 -> call panel()
# Zone 09 = Zem 0 Port 1
# Zone 10 = Zem 0 Port 2
# Zone 11 = Zem 0 Port 3
# Zone 12 = Zem 0 Port 4
# Zone 13 = Zem 0 Port 5
# Zone 14 = Zem 0 Port 6
# Zone 15 = Zem 0 Port 7
# Zone 16 = Zem 0 Port 8
# Zone 17 = Zem 1 Port 1
# Zone 18 = Zem 1 Port 2
# Zone 19 = Zem 1 Port 3