服务器-客户端 Python 代码:程序不会根据用户输入向用户显示推荐的步行

问题描述 投票:0回答:0

我最近刚开始从 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: 

我试过:

  1. 向推荐功能添加一些打印语句,以查看它是否根据用户的输入正确过滤步行。但是我还是得到了同样的结果

  2. 修改“推荐”功能以包括对空结果的检查,并在没有找到行走的情况下返回一条消息。

    if recommended: return recommended else: return "No walks."
    但即使输入与定义列表中的输入相同,我仍然收到相同的错误

修改了 handle_request() 函数以在请求中有“难度”或“区域”时推荐步行。--收到相同的结果

python server client tcpclient tcpserver
© www.soinside.com 2019 - 2024. All rights reserved.