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.