Menu
Coddy logo textTech

Acquisire input dell'utente

Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 34 di 78.

challenge icon

Sfida

Facile

Nella lezione precedente, hai creato un messaggio di benvenuto per il Bill Split Calculator. Ora aggiungi la funzionalità per raccogliere i dati inseriti dall’utente per il calcolo del conto.

Dopo il messaggio di benvenuto esistente, leggi tre valori inseriti dall’utente:

  1. L’importo totale del conto
  2. La percentuale della mancia (come numero intero, ad es. 15 per il 15%)
  3. Il numero di persone che dividono il conto

Negli script R eseguiti in modalità non interattiva (come su questa piattaforma), l’input viene letto dal flusso di input standard. Per farlo, apri prima una connessione a stdin usando file(), poi leggi ogni riga con readLines() e, al termine, chiudi la connessione:

con <- file("stdin", "r")
bill <- as.numeric(suppressWarnings(readLines(con, n = 1)))
tip_percent <- as.numeric(suppressWarnings(readLines(con, n = 1)))
people <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)

Ecco cosa fa ogni parte:

  • file("stdin", "r"): apre il flusso di input standard per la lettura e lo memorizza in con
  • readLines(con, n = 1): legge esattamente una riga da quella connessione. Nota: readLines() è diversa da readline(): readLines() funziona con le connessioni ai file (incluso stdin) e può leggere più righe alla volta usando n =, mentre readline() funziona solo in modo interattivo nella console R
  • suppressWarnings(...): silenzia gli avvisi innocui che compaiono quando si legge da stdin in questo modo. Quando R legge da stdin in uno script, a volte genera un avviso come "incomplete final line" anche quando tutto funziona correttamente. Racchiudere la chiamata in suppressWarnings() nasconde questi messaggi, così non ingombrano l’output. Non influisce sui valori letti
  • as.numeric(...): converte il testo inserito in un numero
  • close(con): chiude la connessione dopo aver letto tutti i valori

Memorizza i tre valori in variabili chiamate bill, tip_percent e people.

Dopo aver letto i valori inseriti, mostra un messaggio di conferma che riporti quanto inserito nel seguente formato:

Bill: $[bill]
Tip: [tip_percent]%
People: [people]

Usa cat() per tutto l’output e includi i caratteri di nuova riga \n dove necessario. Usa sep = "" in ogni chiamata a cat() per evitare spazi indesiderati.

Per impostazione predefinita, cat() inserisce uno spazio tra ogni elemento che stampa. Per esempio:

cat("Bill: $", 120, "\n")   # prints: Bill: $ 120 

Nota gli spazi indesiderati tra $ e 120, e prima della nuova riga. Aggiungendo sep = "" si indica a cat() di usare invece una stringa vuota come separatore, così non viene inserito nulla tra gli elementi:

cat("Bill: $", 120, "\n", sep = "")   # prints: Bill: $120

Applica questo schema a tutte e tre le righe di conferma:

cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")

Per esempio, se i valori inseriti sono 120, 18 e 4, l’output completo dovrebbe essere:

Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4

Provalo tu

# TODO: Write your code below
# Use cat() to display the welcome message
# Remember to use \n for new lines
cat("Welcome to the Bill Split Calculator!\nLet's split your bill fairly.\n")

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore R online