【问题标题】:Loop that assigns string based on variable基于变量分配字符串的循环
【发布时间】:2020-03-10 15:27:34
【问题描述】:

我有多个 IP 地址,范围从 xxx.xx.xxx.11xxx.xx.xxx.50。 对于 IPAddress .11,我想将字符串 "A01" 分配给变量 cabine。 到 IPAddress .12,字符串 "A02" 等直到 .30 ("A20")

然后,从IPAddress .31,我想分配字符串"B01".32"B02"等一直到.50"B20"

虽然我是一个绝对的初学者,但我认为这不会那么难,但它就是不想工作!

我想用 for 循环对其进行编程,如下所示:

for (i = 11; i < 51; i++) {
  cabine = A and something with i;
}

但是由于字母(A,B)不同,我需要两个不同的循环,对吗? 提前感谢您的帮助!

【问题讨论】:

  • 这甚至不是 Python 循环的语法,看起来像 C。Python 使用 for i in range(11, 51):
  • 对不起,我把它弄混了。我想用python编程。我的意思是我已经有了通过 if 循环的解决方案,但这根本没有效率

标签: python loops for-loop iterator iteration


【解决方案1】:

使用if 语句来确定前缀AB 以及循环索引如何转换为后缀编号。然后使用格式化运算符添加前导零(参见Best way to format integer as string with leading zeros?

for i in range(11, 51):
    if i <= 30:
        prefix = 'A'
        num = i - 10
    else:
        prefix = 'B'
        num = i - 30
    cabine = f'{prefix}{num:02d}'

【讨论】:

  • 听起来很合理,但我如何将 IP 地址和 i 放在一起?因为我通过程序获取 IPAddress。它将 IP 地址存储在另一个名为 IPAddress 的变量中。我真的不知道最后两位如何转换为这个 i 变量
  • IPAddress = f'xxx.xxx.xxx.{i}'
【解决方案2】:

这是您想要的示例:

cabine = []

data = ["xxx.xx.xxx.11" , "xxx.xx.xxx.24", "xxx.xx.xxx.34", "xxx.xx.xxx.45", "xxx.xx.xxx.49", "xxx.xx.xxx.50"]

for val in data:
  number = int(val[-2:])
  if(number > 10 and number<=30):
    cabine.append("A{:02d}".format(number - 10))
  elif(number > 30 and number<=50):
    cabine.append("B{:02d}".format(number - 30))

print(cabine)

【讨论】:

  • 看起来不错!但是我的 IPAddress 存储在另一个名为 IPAddress 的变量中。我用一些 python 代码得到它
  • 是的,您应该编辑您的问题以使其易于理解。我在那里制作了一个“示例”,您可以在代码中实现它。
【解决方案3】:

要处理您的 IP 地址,您可以使用ipaddress 模块。 .packed 成员可以访问IPV4Address 的每个号码。然后你需要一个公式将IP地址转换为A/B和你想要的数字。

from ipaddress import IPv4Address

def gen_name(ip):
    i = IPv4Address(ip).packed[3]
    return f"{'A' if i < 31 else 'B'}{(i-11)%20+1:02}"

for i in range(11,51):
    ip = f'192.168.1.{i}' # generate IPs for testing
    name = gen_name(ip)
    print(ip,name)

输出:

192.168.1.11 A01
192.168.1.12 A02
192.168.1.13 A03
192.168.1.14 A04
192.168.1.15 A05
192.168.1.16 A06
192.168.1.17 A07
192.168.1.18 A08
192.168.1.19 A09
192.168.1.20 A10
192.168.1.21 A11
192.168.1.22 A12
192.168.1.23 A13
192.168.1.24 A14
192.168.1.25 A15
192.168.1.26 A16
192.168.1.27 A17
192.168.1.28 A18
192.168.1.29 A19
192.168.1.30 A20
192.168.1.31 B01
192.168.1.32 B02
192.168.1.33 B03
192.168.1.34 B04
192.168.1.35 B05
192.168.1.36 B06
192.168.1.37 B07
192.168.1.38 B08
192.168.1.39 B09
192.168.1.40 B10
192.168.1.41 B11
192.168.1.42 B12
192.168.1.43 B13
192.168.1.44 B14
192.168.1.45 B15
192.168.1.46 B16
192.168.1.47 B17
192.168.1.48 B18
192.168.1.49 B19
192.168.1.50 B20

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2015-09-05
    相关资源
    最近更新 更多