iT邦幫忙

0

Python for 循环中使用变量

之前写过一个关于 ping IP 段的 Python 脚本,现在想把脚本优化一下,支持自定义输入,代码如下:

import subprocess

StartIPFirst = input("Please type first of the IP: ")
StartIPSecond = input("Please type second of the IP: ")
StartIPThird = input("Please type third of the IP: ")
StartIPFourth = input("Please type fourth of the IP: ")

StartIP = StartIPFirst + "." + StartIPSecond + "." + StartIPThird + "." + StartIPFourth

EndIPFirst = input("Please type first of the IP: ")
EndIPSecond = input("Please type second of the IP: ")
EndIPThird = input("Please type third of the IP: ")
EndIPFourth = input("Please type fourth of the IP: ")

EndIP = EndIPFirst + "." + EndIPSecond + "." + EndIPThird + "." + EndIPFourth

for h in range(int(StartIPFirst), int(EndIPFirst)):
    for i in range(int(StartIPSecond), int(EndIPSecond)):
        for j in range(int(StartIPThird), int(EndIPThird)):
            for k in range(int(StartIPFourth), int(EndIPFourth)):
                IP = "%s.%s.%s.%s" % (h, i, j, k)
                print(IP + "\n")

print(StartIP)
print(EndIP)

当输入完 IP 每个部分后,就直接 print 两个 IP 了,for 循环好像没有运行,什么也没有 print。也没有任何报错,这个是怎么回事?

2 個回答

0
陳軒立
iT邦研究生 5 級 ‧ 2020-06-16 17:09:36
最佳解答

你的code邏輯怪怪的,而且無法執行啊
請善用ipaddress這個lib,v4,v6都能用

import ipaddress

start_ip = str(raw_input("Enter start IP address: "))
end_ip = str(raw_input("Enter end IP address: "))

if "." in start_ip:
    start_ip = ipaddress.IPv4Address(start_ip)
    end_ip = ipaddress.IPv4Address(end_ip)
    for ip_int in range(int(start_ip), int(end_ip) + 1):
        print(ipaddress.IPv4Address(ip_int))
elif ":" in start_ip:
    start_ip = ipaddress.IPv6Address(start_ip)
    end_ip = ipaddress.IPv6Address(end_ip)
    for ip_int in range(int(start_ip), int(end_ip) + 1):
        print(ipaddress.IPv6Address(ip_int))
else:
    print("IP address format error.")

3
listennn08
iT邦研究生 2 級 ‧ 2020-06-16 16:27:45

把你的 range 改 range(start, end+1)


因為有沒有幫助所以我多加解釋

当输入完 IP 每个部分后,就直接 print 两个 IP 了,for 循环好像没有运行,什么也没有 print。也没有任何报错,这个是怎么回事?

Python range() 函数用法隨便找一篇

python range() 函数可创建一个整数列表,一般用在 for 循环中。

函数语法
range(start, stop[, step])
参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
看更多先前的回應...收起先前的回應...

有人按「沒有幫助」
是因為沒有直接寫 code 嗎
/images/emoticon/emoticon19.gif

listennn08 iT邦研究生 2 級 ‧ 2020-06-16 20:15:59 檢舉

現在沒寫 code 都沒幫助了是嗎 /images/emoticon/emoticon38.gif

陳軒立 iT邦研究生 5 級 ‧ 2020-06-16 20:19:32 檢舉

我有貼code了,在樓下......
這下總有幫助了吧/images/emoticon/emoticon01.gif

as900 iT邦新手 1 級 ‧ 2020-06-18 13:30:58 檢舉

不好意思,这两天一直忙,没有试,今天试了一下,就是后面没有 +1 的问题。

那个没有帮助不知道是谁点的,我没法取消。

as900 iT邦新手 1 級 ‧ 2020-06-18 13:32:12 檢舉

楼下的方法好像比我的还好,所以就选了楼下。

listennn08 iT邦研究生 2 級 ‧ 2020-06-18 13:33:05 檢舉

as900
我看不到所以其實沒關係 /images/emoticon/emoticon25.gif
有人覺得沒幫助就多加解釋吧/images/emoticon/emoticon07.gif
我也覺得他的方法比較好

我要發表回答

立即登入回答