我最近刚开始从 YouTube 视频中学习 python tcp,所以我决定根据我的理解来创建代码 该代码可以正常工作并按要求执行。我唯一的问题是,在用户输入后,服务器代码无法显示基于用户输入的推荐步行,即使用户输入与代码中提供的输入完全相同。请问,我做错了什么?我已经提供了出现问题的代码片段,如果能详细解释我做错了什么就好了
PS:这只是一小段代码。目前,提供的这段代码只是循环运行,但对于原始/完整脚本,情况并非如此……我只是想了解为什么它不显示基于用户输入的推荐步行:|
# Client Code
import pickle
import socket
def request(difficulty, area, distance):
host = 'localhost'
port = 5000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
request = {'difficulty': difficulty, 'area': area, 'distance': distance}
s.sendall(pickle.dumps(request))
data = b''
while True:
chunk = s.recv(1022)
if not chunk:
break
data += chunk
response = pickle.loads(data)
return response
# Send request to server
while True:
difficulty = input("diff. lvl: ")
area = input(
"Enter area(PeakA/Linc): ")
while True:
try:
distance = int(float(input("Please don't enter 'strings'\ndistance : ")))
break
except ValueError:
print("Invalid, enter a numeric value.")
# Send request to server
walks = request(difficulty, area, distance)
print(walks)
import socket
import pickle
walk_books = [
{'Area': 'PeakA', 'Book': ' District', 'Walk Name': 'sage', 'Distance': '7 miles', 'Difficulty Lvl': 'Easy',
'Price': 10.99, 'Page': '6'},
{'Area': 'PeakA', 'Book': ' District', 'Walk Name': 'Hill', 'Distance': '5 miles', 'Difficulty Lvl': 'Medium',
'Price': 10.99, 'Page': '1'},
{'Area': 'Linc', 'Book': ' Wolds', 'Walk Name': 'bbey', 'Distance': '5 miles', 'Difficulty Lvl': 'Easy',
'Price': 9.99, 'Page': '2'}
]
def recommend(difficulty, area):
recommended_walks = []
for trek in walk_books:
if trek['Area'] == area and trek['Difficulty Lvl'] == difficulty:
recommended_walks.append(trek)
return recommended_walks
def handle_request(request):
if 'difficulty' in request and 'area' in request:
difficulty = request['difficulty']
area = request['area']
walks = recommend(difficulty, area)
return walks
else:
return {'success': False, 'error': 'Invalid request.'}
host = 'localhost'
port = 5000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen()
print(f'Server listening on {host}:{port}...')
while True:
conn, addr = s.accept()
with conn:
print(f'Connected by {addr}')
data = conn.recv(1022)
if not data:
response = b''
''
else:
request = pickle.loads(data)
response = handle_request(request)
response = pickle.dumps(response)
conn.sendall(response)
# Output
diff. lvl: easy
Enter area(PeakA/Linc): PeakA
Please don't enter 'strings'
distance : 7
[]
diff. lvl:
我试过:
向推荐功能添加一些打印语句,以查看它是否根据用户的输入正确过滤步行。但是我还是得到了同样的结果
修改“推荐”功能以包括对空结果的检查,并在没有找到行走的情况下返回一条消息。
if recommended: return recommended else: return "No walks."
但即使输入与定义列表中的输入相同,我仍然收到相同的错误
修改了 handle_request() 函数以在请求中有“难度”或“区域”时推荐步行。--收到相同的结果