2009-10-19 18 views
8

Ho familiarità con la funzione input(), per leggere una singola variabile dall'input dell'utente. C'è un modo semplice simile per leggere due variabili?Leggere due variabili in una singola riga con Python

Sto cercando l'equivalente di:

scanf("%d%d", &i, &j); // accepts "10 20\n" 

Un modo sono in grado di raggiungere questo obiettivo è quello di utilizzare raw_input() e poi split ciò che è stato immesso. C'è un modo più elegante?

Questo non è per l'uso dal vivo. Solo per l'apprendimento ..

risposta

27

No, come di consueto è raw_input().split()

Nel tuo caso si potrebbe utilizzare map(int, raw_input().split()) se si desidera che siano interi anziché stringhe

Non utilizzare input() per questo. Pensate a cosa succede se l'utente inserisce

import os;os.system('do something bad')

+4

Si noti che a partire da Python 3.0, 'raw_input' è stato rinominato in' input'. (E per ottenere il comportamento originale di 'input', usate' eval (input) '.) – Stephan202

+0

... che dovrebbe essere" applicare 'eval' all'output di' input' ". – Stephan202

+0

Sì, il comportamento ovvio in 3 è molto meglio, ma vorrei che fossero stati rilasciati alcuni avvisi in 2.6 su tali modifiche. Suppongo di dover studiare la guida di aggiornamento –

9

È inoltre possibile leggere dal sys.stdin

import sys 

a,b = map(int,sys.stdin.readline().split()) 
4

Sono un questa roba pure. Ho fatto un po 'di ricerche dal sito web python.org e un po' di hacking per farlo funzionare. La funzione raw_input è tornata di nuovo, modificata dall'input . Questo è ciò che mi si avvicinò con:

i,j = raw_input("Enter two values: ").split 
i = int(i) 
j = int(j) 

scontato, il codice non è elegante come le battute utilizzando scanf di C o C++ s 'cin. Il codice Python sembra più vicino a Java (che impiega un meccanismo completamente diverso da C, C++ o Python) in modo tale che ciascuna variabile debba essere trattata separatamente.

In Python, il raw_input funzione ottiene lettere dalla console e li concatena in una singola stringa come uscita. Quando una sola variabile si trova sulla sinistra lato dell'operatore di assegnazione, il diviso funzione interrompe questa stringa in un elenco di String valori.

Nel nostro caso, in cui ci aspettiamo due variabili, possiamo ottenere valori in essi utilizzando un elenco separato da virgola per i loro identificatori. I valori di stringa vengono quindi assegnati alle variabili elencate. Se vogliamo fare aritmetica con questi valori, abbiamo bisogno di convertirli nel numerica int (o float) Tipo di dati utilizzando la funzione di Python incorporata int o galleggiante.

So che questo post è una risposta a un post molto vecchio e probabilmente la conoscenza è stata là fuori come "conoscenza comune" per qualche tempo.Tuttavia, avrei apprezzato un post come questo, piuttosto che dover passare alcune ore di ricerca e hacking fino a quando non ho trovato quella che ritenevo la soluzione più elegante che potesse essere presentata in una classe CS1.

1

Innanzitutto leggere la linea completa in una stringa come

string = raw_input() 

Quindi utilizzare un ciclo come questo

prev = 0 
    lst = [] 
    index = 0 
    for letter in string : 
     if item == ' ' or item == '\n' : 
      lst.append(int(string[prev:index]) 
      prev = index + 1 

Questo ciclo prende una linea completa come input per la stringa ed elabora le parti in singolarmente e poi aggiunge i numeri alla lista - prima convertendoli in numeri interi.

0

o si può fare questo

input_user=map(int,raw_input().strip().split(" ")) 
0

si può leggere 2 valori int utilizzando questo in Python 3.6.1

n,m = map(int,input().strip().split(" ")) 
+2

Puoi aggiungere una spiegazione del tuo codice e perché risolve il problema? * Solo codice * Le risposte spesso non sono così utili. – Zabuza

0

È inoltre possibile utilizzare questo metodo per qualsiasi numero di ingressi. Considerare quanto segue per tre ingressi separati da spazi:

import sys 

S = sys.stdin.read() 
S = S.split() 
S = [int(i) for i in S] 
l = S[0] 
r = S[1] 
k = S[2] 
Problemi correlati