Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python While循环&;带有函数的if/else/elif语句_Python_Loops - Fatal编程技术网

Python While循环&;带有函数的if/else/elif语句

Python While循环&;带有函数的if/else/elif语句,python,loops,Python,Loops,我正试图用这个脚本设置一个while循环。脚本将要求最终用户输入一个选项。然后,脚本将根据最终用户输入运行一个函数 我在第43-48行创建了一个if/elif/else语句。如您所见,在第47-48行,如果最终用户输入了错误的命令,shell将打印“错误的输入” 当用户输入错误的输入时,脚本结束,我希望脚本在第45行重新提问 1 import ipaddress 2 import socket 3 4 #networx prefix calc 5 def f1()

我正试图用这个脚本设置一个while循环。脚本将要求最终用户输入一个选项。然后,脚本将根据最终用户输入运行一个函数

我在第43-48行创建了一个if/elif/else语句。如您所见,在第47-48行,如果最终用户输入了错误的命令,shell将打印“错误的输入”

当用户输入错误的输入时,脚本结束,我希望脚本在第45行重新提问

1    import ipaddress
2    import socket
3    
4    #networx prefix calc
5    def f1():
6        try:
7            network = input('please input network address with the prefix: ')
8            network = ipaddress.ip_network(network)
9            print(network)
10   
11       except ValueError:
12           print('That is not a network address')
13   
14       iplist= list(ipaddress.ip_network(network).hosts())
15       for i in range(10,len(iplist),2):
16           print(iplist[i])
17   #port scan
18   def f2():
19       s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
20       target = input("what website to scan?: ")
21       def pscan(port):
22           try:
23               con = s.connect((target, port))
24               return True
25           except:
26               return False
27       for x in range(81):
28           if pscan(x) > pscan(int(x)):
29               print("port ",x," is open")
30           else:
31               print("port ",x," is closed")
32   
33       with open("ports.txt,"r"") as ports:
34           ports = ports.read()
35           ports = int(ports)
36   
37   #user input
38   print("Please enter 'network' to calculate odd number IP address ranges")
39   print("Please enter 'port' to scan ports 1-80")
40   
41   q1= input("please input your choice:  ")
42   
43   if= q1 == "network":
44       f1()
45   elif q1 == "port":
46       f2()
47   else:
48       print("incorrect input, try again")
故障排除

我试图通过删除else语句并使用while语句重新接收它来进行故障排除(代码发布在下面)。但是,如果输入不正确,程序仍然存在

if q1 == "network":
    f1()
elif q1 == "port":
    f2()
#else:
    #print("incorrect input, try again")

while q1 != "network" or "port":
    print("incorrect input, try again")
    break

处理这个问题的更简单的方法是将所有内容都包含在一个无限循环中,并在您有有效输入时显式地中断它

valid_input = False
while not valid_input:
    q1 = input("please input your choice:  ")
    if q1 == "network":
        f1()
        valid_input = True
    elif q1 == "port":
        f2()
        valid_input = True
    else:
        print("incorrect input, try again")
如您所见,如果我们沿着任何一条有效的路径前进,那么我们将退出循环。否则,我们将无限期地继续下去