3

Una pregunta muy sencilla, ¿si en write quiero escribir dos cosas como debo hacerlo?

Un ejemplo:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
    entrada = input("Introduce el angulo: ")
    ser.write(str(entrada)) 

¿Qué debo hacer aquí para que el write escriba la entrada y luego un 1 detrás de esta y que, si yo en la entrada escribo 90, el write envie 901?

FJSevilla
  • 55,603
  • 7
  • 35
  • 58
Orizzon
  • 215
  • 1
  • 9
  • Si te he entendido solo concatena: `ser.write((str(entrada) + "1").encode())` o usa str.format: `ser.write("{}1".format(entrada).encode())`. Una observación, si usas Python 2 usa `raw_input`, si usas Python 3 usa `input`. Ambas retornan una cadena. basta con hacer luego:`ser.write(entrada + "1")...` Evita`input` en Python 2 para entradas de usuario sin filtrar , es muy peligroso. Mirate [Duda con raw_input()](https://es.stackoverflow.com/questions/38288/duda-con-raw-input). – FJSevilla Aug 28 '17 at 02:00
  • @FJSevilla muchas gracias. El problema es que no ha salido como me esperaba. Quería hacer esto para evitarme tener que poner el 1 pero mi servo no se mueve. – Orizzon Aug 28 '17 at 02:03
  • ¿Que error te da?¿Por qué no funciona exactamente?¿Usas Python 2 o Python 3? – FJSevilla Aug 28 '17 at 02:04
  • @FJSevilla Ningún error. Escribo el angulo y el servomotor no se mueve. Eso si, si escribo el angulo con el 1 al final como hacia antes por una extraña razón no se mueve donde que le corresponde. – Orizzon Aug 28 '17 at 02:05
  • @FJSevilla perdón pero ahora si que me funciona. No se que había hecho mal antes. Falsa alarma. Ya he puesto lo de raw_input. Ahora solo me falta hacer una web que me permita mover los servos. Gracias por la ayuda. – Orizzon Aug 28 '17 at 02:10

1 Answers1

3

Simplemente debes concatenar ambas cadenas:

ser.write((str(entrada) + "1").encode())

O usando str.format():

ser.write("{}1".format(entrada).encode())

En Python >= 3.6 se pueden usar literales de cadena formateados:

ser.write(f"{entrada}1".encode())

Es importante asegurarse que a write se le pasan bytes y no una cadena codificada u otro tipo de dato (por eso el uso de encode). En Python 2, si estamos seguros de que el resultado es de tipo str no hace falta. Este código es válido para Python 2 y Python 3.

Por otro lado, usar input en Python 2 para entradas de usuario sin filtrar es muy peligroso dado que ejecuta todo código válido introducido. En su lugar se debe usar raw_input que, al igual que input en Python 3, retorna un objeto str. Ver Duda con raw_input() para más información.

FJSevilla
  • 55,603
  • 7
  • 35
  • 58