Tại sao x
và y
chuỗi thay vì int trong đoạn mã dưới đây?
(Lưu ý: trong Python sử dụng 2.x raw_input()
. Trong Python 3.x sử dụng input()
. raw_input()
Được đổi tên thành input()
bằng Python 3.x)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
TLDR
input
hàm, nhưng input
hàm của Python 2 thì có (đọc phần tiếp theo để hiểu hàm ý).input
là raw_input
hàm.Python 2.x
Có hai hàm để lấy thông tin đầu vào của người dùng, được gọi input
và raw_input
. Sự khác biệt giữa chúng là, raw_input
không đánh giá dữ liệu và trả về như nó vốn có, ở dạng chuỗi. Tuy nhiên, input
sẽ đánh giá bất cứ điều gì bạn đã nhập và kết quả đánh giá sẽ được trả lại. Ví dụ,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Dữ liệu 5 + 17
được đánh giá và kết quả là 22
. Khi nó đánh giá biểu thức 5 + 17
, nó sẽ phát hiện rằng bạn đang thêm hai số và do đó kết quả cũng sẽ có cùng int
kiểu. Vì vậy, việc chuyển đổi kiểu được thực hiện miễn phí và 22
được trả về dưới dạng kết quả của input
và được lưu trữ trong data
biến. Bạn có thể input
coi là raw_input
sáng tác với một eval
cuộc gọi.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Lưu ý: bạn nên cẩn thận khi sử dụng input
Python 2.x. Tôi đã giải thích lý do tại sao người ta nên cẩn thận khi sử dụng nó, trong câu trả lời này .
Nhưng, raw_input
không đánh giá đầu vào và trả về như nó vốn có, dưới dạng một chuỗi.
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Python 3.x
Python 3.x's input
và Python 2.x's raw_input
tương tự và raw_input
không có sẵn trong Python 3.x.
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
Giải pháp
Để trả lời câu hỏi của bạn, vì Python 3.x không đánh giá và chuyển đổi kiểu dữ liệu, bạn phải chuyển đổi rõ ràng thành int
s, với int
, như thế này
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Bạn có thể chấp nhận các số của bất kỳ cơ số nào và chuyển đổi chúng trực tiếp thành cơ số 10 bằng int
hàm, như thế này
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
Tham số thứ hai cho biết cơ sở của các số được nhập vào là gì và sau đó bên trong nó hiểu và chuyển đổi nó. Nếu dữ liệu đã nhập sai, nó sẽ ném ra một ValueError
.
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
Đối với các giá trị có thể có thành phần phân số, kiểu float
thay vì int
:
x = float(input("Enter a number:"))
Ngoài ra, chương trình của bạn có thể được thay đổi một chút, như thế này
while True:
...
...
if input("Play again? ") == "no":
break
Bạn có thể loại bỏ play
biến bằng cách sử dụng break
và while True
.
Trong Python 3.x, raw_input
đã được đổi tên thành input
và Python 2.x input
đã bị xóa.
Điều này có nghĩa là, giống như raw_input
, input
trong Python 3.x luôn trả về một đối tượng chuỗi.
Để khắc phục sự cố, bạn cần phải biến các đầu vào đó thành số nguyên một cách rõ ràng bằng cách đặt chúng vào int
:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Đối với nhiều số nguyên trong một dòng, map
có thể tốt hơn.
arr = map(int, raw_input().split())
Nếu số đã biết, (như 2 số nguyên), bạn có thể sử dụng
num1, num2 = map(int, raw_input().split())
input()
(Python 3) và raw_input()
(Python 2) luôn trả về chuỗi. Chuyển đổi kết quả thành số nguyên một cách rõ ràng với int()
.
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Nhiều câu hỏi yêu cầu đầu vào cho một số số nguyên trên một dòng. Cách tốt nhất là nhập toàn bộ chuỗi số vào một dòng và sau đó chia chúng thành số nguyên. Đây là phiên bản Python 3:
a = []
p = input()
p = p.split()
for i in p:
a.append(int(i))
Cũng có thể sử dụng cách hiểu danh sách
p = input().split("whatever the seperator is")
Và để chuyển đổi tất cả các đầu vào từ chuỗi thành int, chúng ta làm như sau
x = [int(i) for i in p]
print(x, end=' ')
sẽ in các phần tử danh sách trên một đường thẳng.
Chuyển đổi thành số nguyên:
my_number = int(input("enter the number"))
Tương tự đối với số dấu phẩy động:
my_decimalnumber = float(input("enter the number"))
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))
vòng lặp for sẽ chạy 'n' số lần. 'n' thứ hai là độ dài của mảng. câu lệnh cuối cùng ánh xạ các số nguyên vào một danh sách và nhận đầu vào trong biểu mẫu được phân tách bằng dấu cách. bạn cũng có thể trả về mảng ở cuối vòng lặp for.
Tôi đã gặp sự cố khi lấy đầu vào số nguyên trong khi giải quyết vấn đề trên CodeChef , trong đó hai số nguyên - được phân tách bằng dấu cách - sẽ được đọc từ một dòng.
Mặc dù int(input())
là đủ cho một số nguyên duy nhất, nhưng tôi không tìm thấy cách trực tiếp để nhập hai số nguyên. Tôi đã thử điều này:
num = input()
num1 = 0
num2 = 0
for i in range(len(num)):
if num[i] == ' ':
break
num1 = int(num[:i])
num2 = int(num[i+1:])
Bây giờ tôi sử dụng num1 và num2 dưới dạng số nguyên. Hi vọng điêu nay co ich.
def dbz():
try:
r = raw_input("Enter number:")
if r.isdigit():
i = int(raw_input("Enter divident:"))
d = int(r)/i
print "O/p is -:",d
else:
print "Not a number"
except Exception ,e:
print "Program halted incorrect data entered",type(e)
dbz()
Or
num = input("Enter Number:")#"input" will accept only numbers
Trong khi trong ví dụ của bạn, int(input(...))
hiện các trick trong mọi trường hợp, python-future
's builtins.input
là giá trị xem xét vì đó đảm bảo công trình mã của bạn cho cả Python 2 và 3 và hành vi mặc định vô hiệu hóa python2 của input
cố gắng để được 'thông minh' về kiểu dữ liệu đầu vào ( builtins.input
về cơ bản chỉ cư xử như thế nào raw_input
).
Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.
Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?
Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.
Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.
Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?
Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.
Trump và Giám đốc điều hành GM Mary Barra vào năm 2017. Kể từ khi tin tức nổ ra ngày hôm qua rằng General Motors đang cắt giảm việc làm ở Bắc Mỹ để chuẩn bị cho tương lai điện / xe tự hành / khủng khiếp có thể xảy ra của chúng tôi, gần như tất cả mọi người đã tự hỏi: Tổng thống Trump, người đã vận động tranh cử trên một nền tảng sẽ như thế nào của việc mang lại và duy trì việc làm ô tô của Mỹ, phải nói gì về điều này? Bây giờ chúng ta biết.
Bethesda cho biết ngày hôm nay trên Reddit, Fallout 76 sẽ có một bản vá lớn khác vào ngày 4 tháng 12, sẽ bắt đầu cố gắng khắc phục một số vấn đề lớn hơn của trò chơi. Ngoài ra, công ty cho biết họ có kế hoạch giao tiếp nhiều hơn trong tương lai về những gì nhóm Fallout 76 đang làm việc và khi nào các bản cập nhật mới cho trò chơi sẽ ra mắt.
Bạn có biết rằng một trong sáu bệnh nhân ở bệnh viện ở Hoa Kỳ được điều trị tại một cơ sở Công giáo? Và bạn có biết rằng quyền sở hữu của Công giáo hạn chế sâu sắc việc thiết lập các thủ tục y tế có thể được thực hiện trong các bệnh viện này, rõ ràng nhất là khi nói đến chăm sóc sức khỏe sinh sản? Bây giờ NPR báo cáo rằng sự gia tăng của các bệnh viện thuộc Công giáo đang gây khó khăn hơn cho các bác sĩ — những người bị cấm bởi các quy định do Hoa Kỳ viết.
Đường chân trời San Francisco bị che khuất bởi khói và khói mù do cháy rừng phía sau Đảo Alcatraz, Thứ Tư, ngày 14 tháng 11 năm 2018, ở San Francisco.
Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!
Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!
Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không
Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"
Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.
Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.
Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.
Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.