有更好的方法来做这个数学吗? [已关闭]

问题描述 投票:0回答:1

我用 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);
python modulo
1个回答
0
投票

尝试:

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
© www.soinside.com 2019 - 2024. All rights reserved.