我希望我的脚本重复input
个问题,直到用户提示正确答案为止。在用户提示正确答案后,脚本必须继续使用相对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()))
谢谢!
答案 0 :(得分:1)
你有一个无限循环,因为条件while opt1 != 'hostname' or 'file':
检查2个条件:
opt1 != 'hostname'
或'file'
即使opt1 != 'hostname'
评估为True
,第二个条件实际上会检查'file'
是True
还是False
(比较if opt1 != 'file'
if 'file'
)。 您可以在python中查看有关字符串布尔值的this答案
由于if 'file'
始终为True
,因此您会产生无限循环
修复
while opt1 != 'hostname' and opt1 != 'file':
[使用AND
,因为opt1
必须与这两个选项不同] 或while opt1 not in ('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"')
答案 1 :(得分:0)
while opt1 not in ["hostname", "file"]:
opt1 = input(...
正如评论中所提到的,你的while循环条件很差。