python脚本落入无限循环中

时间:2018-02-22 15:50:26

标签: python while-loop

我希望我的脚本重复input个问题,直到用户提示正确答案为止。在用户提示正确答案后,脚本必须继续使用相对if语句在这种情况下hostnamefile。我出来了下面的代码,但似乎陷入无限循环。

import socket

def ipFromHost():
  opt1 = input('Do you want provide  hostname or file: ') 
  while opt1 != 'hostname' or 'file':
    input('Please, type "hostname" or "file"')
  if opt1 == 'hostname':
    optHostname = input('Please, provide hostname: ')
    print(socket.gethostbyname(optHostname.strip()))
  elif opt1 == 'file':
    optFile = input('Please, provide file name: ')
    with open(optFile) as inputFile:
      for i in inputFile:
        print(socket.gethostbyname(i.strip()))

谢谢!

2 个答案:

答案 0 :(得分:1)

你有一个无限循环,因为条件while opt1 != 'hostname' or 'file':检查2个条件:

  1. opt1 != 'hostname'
  2. 'file'
  3. 即使opt1 != 'hostname'评估为True,第二个条件实际上会检查'file'True还是False(比较if opt1 != 'file' if 'file')。 您可以在python中查看有关字符串布尔值的this答案

    由于if 'file'始终为True,因此您会产生无限循环

    修复

    1. while opt1 != 'hostname' and opt1 != 'file': [使用AND,因为opt1必须与这两个选项不同]
    2. while opt1 not in ('hostname', 'file') [我的意见似乎更整洁]
    3. 您的代码应如下所示:

      def ipFromHost():
        opt1 = input('Do you want provide  hostname or file: ') 
        while opt1 not in ('hostname', 'file'):
          opt1 = input('Please, type "hostname" or "file"')
      

答案 1 :(得分:0)

while opt1 not in ["hostname", "file"]:
    opt1 = input(...

正如评论中所提到的,你的while循环条件很差。