将字符串转换为数字

时间:2019-04-01 12:31:01

标签: python zeromq pyzmq

我正在构建一个机器人,需要对其进行远程控制。我决定通过使用zeromq来做到这一点。我将从计算机(服务器)将x和y坐标发送到机器人(客户端)。因此,我需要将消息以数字形式发送,以便使机器人进入坐标。我该怎么做呢?我对编程非常陌生(如您所知),我目前有以下代码:

客户端

import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://127.0.0.1:5555")
while True:
        socket.send_string("Robot Ready")
        coordinates= socket.recv_string()
        print("From server",coordinates)
#And here i want to use the received coordinates to give the robot commands#

服务器

import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5555")

while True:
    msg = socket.recv()
    print(msg)
    smsg = input("Enter coordinates : ")
    socket.send_string(smsg)`

我将代码更新为此(它可以正常工作,但我觉得这没必要很长时间):

client2

import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://127.0.0.1:5555")

while True:
        socket.send_string("AGV Ready")
        x_start = float(socket.recv())
        socket.send_string("X-coordinate registred")
        y_start = float(socket.recv())
        socket.send_string('Y-coordinate registred')
        x_end = float(socket.recv())
        socket.send_string("X-coordinate registred")
        y_end = float(socket.recv())
        print("Start position: ",x_start, y_start)
        print("End position: ", x_end, y_end)

server2

import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5555")

while True:
    msg = socket.recv()
    print(msg)
    smsg = input("Pick up product at x,y : ")
    smsg_new = smsg.split(',')
    socket.send_string(smsg_new[0])
    socket.recv()
    socket.send_string(smsg_new[1])
    socket.recv()
    smsg2 = input("Leave product at x,y : ")
    smsg2_new = smsg2.split(',')
    socket.send_string(smsg2_new[0])
    socket.recv()
    socket.send_string(smsg2_new[1])

3 个答案:

答案 0 :(得分:1)

我假设输入应为整数。所以我建议

socket.send_string(int(smsg))

编辑:

期望的格式是什么? X和Y坐标是否应该用逗号等分隔?

如果同时发送X和Y,则应将用户输入限制为以下格式:

<X-coordinates>, <Y-coordinates>

然后分割字符串:

xy = smsg.split(',')
socket.send_string((int(xy[0]), int(xy[1]))

答案 1 :(得分:0)

我假设您的坐标将采用“ x y”的形式。 要解析坐标,您需要split()和演员表。

将此添加到您的客户代码中:

sp = coordinates.split(' ') #This splits the string into a string array
                            #Using the specified delimiter
x = float(sp[0]) #This float() command converts the string into an number
y = float(sp[1])
print("X Cordinate: " + str(x))
print("Y Cordinate: " + str(y))

如果您的坐标以逗号分隔,则只需使用split(',')即可。

编辑

每个评论中的建议,的确可以简化为

x, y = map(float, coordinates.split(' '))

您可以阅读有关map() here的内容。但是,我仍然建议您在python casting上进行其他阅读。这是一项不容忽视的基本技能。

答案 2 :(得分:-1)

try:
    value = int(strvalue)
except ValueError:
    print("Failed to convert str to int.")