2009-10-19 33 views
8

Tôi quen với hàm input(), để đọc một biến duy nhất từ ​​đầu vào của người dùng. Có cách nào dễ dàng tương tự để đọc hai biến?Đọc hai biến trong một dòng với Python

Tôi đang tìm tương đương với:

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

Một cách tôi có thể đạt được điều này là sử dụng raw_input() và sau đó split những gì đã được nhập. Có cách nào thanh lịch hơn không?

Đây không phải để sử dụng trực tiếp. Chỉ cần cho việc học ..

Trả lời

27

Không, theo cách thông thường là raw_input().split()

Trong trường hợp của bạn, bạn có thể sử dụng map(int, raw_input().split()) nếu bạn muốn họ được số nguyên chứ không phải là chuỗi

Không sử dụng input() cho điều đó. Xem xét những gì sẽ xảy ra nếu người dùng nhập vào

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

+4

Lưu ý rằng bắt đầu với Python 3.0, 'raw_input' được đổi tên thành' đầu vào'. (Và để có được hành vi ban đầu của 'input', sử dụng' eval (input) '.) – Stephan202

+0

... cần được" áp dụng 'eval' cho đầu ra của' input' ". – Stephan202

+0

Có, hành vi rõ ràng trong 3 là tốt hơn nhiều, nhưng tôi ước họ đã bỏ một số cảnh báo thành 2.6 về những thay đổi đó. Tôi đoán tôi cần phải nghiên cứu hướng dẫn nâng cấp –

9

Bạn cũng có thể đọc từ sys.stdin

import sys 

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

Tôi mới vào công cụ này là tốt. Đã làm một chút nghiên cứu từ trang web python.org và một chút hack để có được điều này để làm việc. Chức năng raw_input đã hoạt động trở lại, được thay đổi từ đầu vào. Đây là những gì tôi đã đưa ra:

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

Cấp, mã không phải là thanh lịch như một lớp lót bằng C scanf hoặc C++ 's cin. Mã Python trông gần gũi hơn với Java (trong đó sử dụng một cơ chế hoàn toàn khác với C, C++ hoặc Python) sao cho mỗi biến cần được xử lý riêng biệt.

Trong Python, các raw_input chức năng được nhân vật ra khỏi giao diện điều khiển và concatenates chúng thành một đơn Chuỗi như sản lượng của nó. Khi chỉ là một biến được tìm thấy trên trái-side của người điều khiển giao, các chia chức năng phá vỡ này Chuỗi vào một danh sách của Chuỗi giá trị.

Trong trường hợp của chúng tôi, một nơi chúng tôi mong đợi hai biến, chúng tôi có thể nhận giá trị vào chúng bằng cách sử dụng danh sách được phân tách bằng dấu phẩy cho số nhận dạng của chúng. Chuỗi giá trị sau đó được gán vào các biến được liệt kê. Nếu chúng ta muốn làm phép tính với các giá trị, chúng ta cần phải chuyển đổi chúng thành các số int (hoặc phao) kiểu dữ liệu sử dụng built-in int hoặc phao chức năng của Python.

Tôi biết bài đăng này là câu trả lời cho một bài đăng rất cũ và có lẽ kiến ​​thức đã được đưa ra ở đó dưới dạng "kiến thức phổ biến" trong một thời gian.Tuy nhiên, tôi đã đánh giá cao việc đăng tải như thế này hơn là phải mất vài giờ tìm kiếm và hack cho đến khi tôi nghĩ ra giải pháp thanh lịch nhất có thể được trình bày trong một lớp học CS1.

1

Trước hết đọc dòng hoàn toàn thành một chuỗi như

string = raw_input() 

Sau đó sử dụng một vòng lặp for như thế này

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

vòng lặp này có một dòng đầy đủ làm đầu vào cho chuỗi và xử lý các bộ phận trong nó riêng lẻ và sau đó nối thêm các số vào danh sách - sau khi chuyển đổi chúng thành số nguyên.

0

hoặc bạn có thể làm điều này

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

bạn có thể đọc 2 int giá trị bằng cách sử dụng này trong python 3.6.1

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

Bạn có thể thêm giải thích mã của bạn và lý do giải thích vấn đề không? * Mã chỉ * câu trả lời thường không hữu ích. – Zabuza

0

Bạn cũng có thể sử dụng phương pháp này cho bất kỳ số lượng đầu vào. Hãy xem xét những điều sau đây cho ba yếu tố đầu vào được phân tách bằng khoảng trắng:

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] 
Các vấn đề liên quan