如何解决使用 for 循环
我正在尝试执行以下代码,该代码在文本文件中搜索 mac 地址,如果找到,它会询问用户是否要根据找到的 IP 和密码调用 API 来检索设备信息。此外,它还为用户提供了开始新搜索或退出的选项。
如果搜索匹配,这部分工作完美。搜索不匹配时的问题就在这里! 它在第一次尝试中正确执行“未找到匹配项!”,然后再次执行该函数,但如果用户重新输入一个没有匹配项的 mac 地址,则代码不会再次重新执行并结束程序。
下面是代码
import http.client
from base64 import b64encode
import ssl
import json
def search_mac():
with open(r"C:\Users\afahmy\Desktop\final.txt","r") as output_file:
search = input("Enter mac-address: ")
search = search.lower().replace(':','')
for line in output_file:
ip = line.split(',')[0]
# print(ip)
password = line.split(',')[1]
# print(password)
mac = line.split(',')[2].rstrip()
# print(mac)
if search == mac:
print(format("IP:" + ip + "\n" + "password:" + password))
if input("Do you want to retrieve device information?[y/n]") == 'y':
ssl._create_default_https_context = ssl._create_unverified_context
auth_string = "Polycom:"
admin_password = auth_string + password
conn = http.client.HTTPSConnection(ip)
userandpass = b64encode(admin_password.encode('UTF-8')).decode('ascii')
headers = {'Authorization': 'Basic %s' % userandpass}
conn.request("GET","/api/v1/mgmt/device/info",headers=headers)
res = conn.getresponse()
data = res.read()
json_format = json.loads(data)
dictionary = json_format["data"]
dictionary_new = {k: dictionary[k] for k in dictionary.keys() - {'IPV6Address','DeviceType','DeviceVendor','AttachedHardware'}}
for item in dictionary_new.items():
print(item)
if input("Do you want to make another search?[y/n]:") == 'y':
search_mac()
else:
print("Thank you!")
exit()
search_mac()
print("No Match!")
if input("Do you really want to make another search?[y/n]:") == 'y':
search_mac()
else:
print("Thank you for your time!")
这是我第一次输入错误的 mac 地址(效果很好)和第二次(这是问题所在)时的输出。
Enter mac-address: 64167f185bf30000 <<<< i added 4 zeros to be a wrong one
No Match!
Do you really want to make another search?[y/n]:y
Enter mac-address: 64167f185bf3 <<<< entered a correct one
IP:10.10.10.4
password:Password!
Do you want to retrieve device information?[y/n]n
Do you want to make another search?[y/n]:y
Enter mac-address: 64167f185bf300 <<<< again a mac address that does not have a match
Process finished with exit code 0
解决方法
代码运行良好!
您正在等待 No match,是吗?您需要将 print("No Match!")
移入 def search_mac()
代码在 de 函数外打印出第一个“No match”,但查看 de 函数内部,没有“No match”。这是开发人员的逻辑错误,但代码正在做他的工作
这里的快速实现可以帮助您完成工作。但是这段代码非常基础,可能有逻辑错误,可以通过以下方式改进:
- 处理重复的mac
- while 退出捕捉信号的真循环
- 只读取一次文件
- 内存泄漏,无需关闭前辈即可打开亿万次
search_mac()
def search_mac():
with open(r"C:\Users\afahmy\Desktop\final.txt","r") as output_file:
found = False
search = input("Enter mac-address: ")
search = search.lower().replace(':','')
for line in output_file:
ip = line.split(',')[0]
# print(ip)
password = line.split(',')[1]
# print(password)
mac = line.split(',')[2].rstrip()
# print(mac)
if search == mac:
print(format("IP:" + ip + "\n" + "password:" + password))
if input("Do you want to retrieve device information?[y/n]") == 'y':
ssl._create_default_https_context = ssl._create_unverified_context
auth_string = "Polycom:"
admin_password = auth_string + password
conn = http.client.HTTPSConnection(ip)
userandpass = b64encode(admin_password.encode('UTF-8')).decode('ascii')
headers = {'Authorization': 'Basic %s' % userandpass}
conn.request("GET","/api/v1/mgmt/device/info",headers=headers)
res = conn.getresponse()
data = res.read()
json_format = json.loads(data)
dictionary = json_format["data"]
dictionary_new = {k: dictionary[k] for k in dictionary.keys() - {'IPV6Address','DeviceType','DeviceVendor','AttachedHardware'}}
found = True
for item in dictionary_new.items():
print(item)
break
if not found:
print("No Match!")
if input("Do you want to make another search?[y/n]:") == 'y':
search_mac()
else:
print("Thank you for your time!")
exit(0)
search_mac()```
,
非常感谢@gilito!!该代码的正确率为 95%,除了它打印 No Match!新提示后
输出:
Enter mac-address: 64167f185bf3
IP:10.10.10.5
password:Password!
Do you want to retrieve device information?[y/n]n
No Match! <<<<<<<<<<< unwanted line
Do you want to make another search?[y/n]:
我在您所做的修改的基础上进行了构建,并添加了一个 while 循环来检查第一个块内用户是否想要进行新搜索,如果不想则退出程序。
所以完整的代码如下
def search_mac():
with open(r"C:\Users\afahmy\Desktop\final.txt",')[2].rstrip()
# print(mac)
if search == mac:
print(format("IP:" + ip + "\n" + "password:" + password))
entry = input("Do you want to retrieve device information?[y/n]")
while entry == 'y':
ssl._create_default_https_context = ssl._create_unverified_context
auth_string = "Polycom:"
admin_password = auth_string + password
conn = http.client.HTTPSConnection(ip)
userandpass = b64encode(admin_password.encode('UTF-8')).decode('ascii')
headers = {'Authorization': 'Basic %s' % userandpass}
conn.request("GET",'AttachedHardware'}}
found = True
for item in dictionary_new.items():
print(item)
break
else:
if input("Do you want to make another search?[y/n]:") == 'y':
search_mac()
else:
print("Thank you for your time!")
exit(0)
if not found:
print("No Match!")
if input("Do you want to make another search?[y/n]:") == 'y':
search_mac()
else:
print("Thank you for your time!")
exit(0)
search_mac()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。