Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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循环中_Python_While Loop - Fatal编程技术网

python脚本落入无限while循环中

python脚本落入无限while循环中,python,while-loop,Python,While Loop,我希望脚本重复输入问题,直到用户提示正确答案。在用户提示正确答案后,脚本必须继续执行相对if语句(在本例中为hostname或file)。我给出了下面的代码,但似乎陷入了无限循环 import socket def ipFromHost(): opt1 = input('Do you want provide hostname or file: ') while opt1 != 'hostname' or 'file': input('Please, type "hostn

我希望脚本重复输入问题,直到用户提示正确答案。在用户提示正确答案后,脚本必须继续执行相对if语句(在本例中为
hostname
file
)。我给出了下面的代码,但似乎陷入了无限循环

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()))

谢谢

由于opt1!='“主机名”或“文件”:检查2个条件:

  • opt1!='主机名“
  • “文件”
  • 即使
    opt1!='主机名“
    将计算为
    True
    ,第二个条件实际上检查
    'file'
    是否为
    True
    False
    (将
    if opt1!=“file”
    if'file'
    进行比较)。您可以检查python中字符串的布尔值的答案

    由于
    如果“file”
    总是
    True
    会生成一个无限循环

    修理


  • 而opt1!='hostname'和opt1!='文件“:
    [使用
    ,因为
    opt1
    必须与这两个选项不同]或
  • 而opt1不在('hostname','file')
    [在我的选项中似乎更整洁]

  • 您的代码应该如下所示:

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

    如注释中所述,您的while循环的条件不好。

    while opt1!='hostname'或'file':
    没有做您认为应该做的事情…
    而opt1!='主机名“或”文件“:
    这被解释为:While opt1!='hostname'或'file'==true或'file'==true事实上,除0以外的每一项都是true元组(而不是列表)的性能更高,更好地反映了比较值的不变性。感谢您的回答和解释。我现在可以看到循环是“固定”的,但是在提示hostname或file
    >>>ipFromHost()后,脚本中的if语句无法继续。是否要提供主机名或文件:home请,键入“主机名”或“文件”:home请,键入“主机名”或“文件”:file请,键入“主机名”或“文件”:hostname请,键入“主机名”或“文件”:
    @FedericoOlivieri我看到我的答案了:你的代码没有用用户输入更新opt1的值。@tehhowch我不明白你的意思。你能提供一个例子来说明如何修复它,这样我就可以理解了。谢谢@FedericoOlivieri-正如@tehhowch所说,在循环中,你要求
    input()
    ,但你没有将结果分配到
    opt1
    对不起,伙计们,我现在已经得到了。它按预期工作。谢谢你的时间
    while opt1 not in ["hostname", "file"]:
        opt1 = input(...