Tämä Python-funktio lukee käyttäjältä useamman syötteen annetun merkkijonon mukaisesti. Merkkijonoon merkitään aaltosuluilla, missä kohti pitäisi lukea syöte käyttäjältä, eli kyseessä on ikään kuin käänteinen versio f-merkkijonoista. Sisäisesti tämä käyttää vain input- ja print-funktioita, joten käyttäjän syöttämä enter aiheuttaa konsolissa rivinvaihdon, ja siksi myös parametrissa syötekohtien pitää olla aina rivin lopussa.
Funktio sopii tyypillisten ohjelmointitehtävien avuksi: voi vain kopioida esimerkkitekstit ja vaihtaa arvojen tilalle sopivat merkinnät {str}, {int} ja {float}. Myös välilyönnillä eroteltuja arvoja voi lukea.
Kopioijalle kotitehtäväksi jätetään mielivaltaisen mittaisten listojen toteutus (esim. {int*}, joka katkoisi syötteen listaksi lukuja).
def input_tuple(prompt): """Reads multiple lines of input according to a format string. Supported types: {str}, {int}, {float}. Space separated list: {int str float} accepts "123 apple 456.7". The input must always be at the end of a line. Example: data = input_tuple('''Welcome to the discount example! Enter some values: Item {str}: {str} Price {float}: {float} Count and discounted total price {int float}: {int float} ''') print(f"Your input: {data}") item, price, count, total = data print(f"Pricing: -- {item}: {price} (discount: buy {count} for {total})") """ convert = {"int": int, "float": float, "str": str} data = [] for line in prompt.split("\n"): # Missing or badly positioned {} => just print. if (i := line.rfind("{")) < 0 or line[-1] != "}": print(line) continue # Read and convert the value. fmt = line[i+1:-1].split() value = input(line[:i]).split(maxsplit = len(fmt) - 1) data += [convert[fmt[i]](value[i]) for i in range(len(fmt))] return tuple(data) if __name__ == "__main__": data = input_tuple(input_tuple.__doc__) print(f"This script just dumps your input: {data}")
Aihe on jo aika vanha, joten et voi enää vastata siihen.