Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Usean syötteen input-funktio

Metabolix [27.07.2023 19:23:18]

#

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}")

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta