ฉันจะอ่านอินพุตเป็นตัวเลขได้อย่างไร
เหตุใดจึงเป็นสตริงx
และy
แทนที่จะเป็น ints ในโค้ดด้านล่าง
(หมายเหตุ: ในการใช้งาน 2.x หลามraw_input()
. ในหลามใช้ 3.x input()
. raw_input()
ถูกเปลี่ยนชื่อinput()
ในหลาม 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
- Python 3 ไม่ได้ประเมินข้อมูลที่ได้รับด้วย
input
ฟังก์ชัน แต่input
ฟังก์ชันของ Python 2 ทำ (อ่านหัวข้อถัดไปเพื่อทำความเข้าใจความหมาย) - Python 2 เทียบเท่ากับ Python 3
input
คือraw_input
ฟังก์ชัน
Python 2.x
มีสองฟังก์ชั่นที่จะได้รับการป้อนข้อมูลของผู้ใช้ที่เรียกว่าเป็นและinput
raw_input
ความแตกต่างระหว่างพวกเขาคือraw_input
ไม่ได้ประเมินข้อมูลและส่งคืนตามที่เป็นอยู่ในรูปแบบสตริง แต่input
จะประเมินสิ่งที่คุณป้อนและผลการประเมินจะถูกส่งกลับ ตัวอย่างเช่น,
>>> 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'>)
ข้อมูลที่ได้รับการประเมินและผลที่ได้คือ5 + 17
22
เมื่อประเมินนิพจน์5 + 17
ตรวจพบว่าคุณกำลังเพิ่มตัวเลขสองตัวดังนั้นผลลัพธ์จะเป็นint
ประเภทเดียวกันด้วย ดังนั้นการแปลงประเภทจึงทำได้ฟรีและ22
ส่งคืนเป็นผลลัพธ์input
และเก็บไว้ในdata
ตัวแปร คุณสามารถคิดinput
เป็นraw_input
ประกอบกับeval
การโทร
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
หมายเหตุ:คุณควรระมัดระวังเมื่อใช้input
ใน Python 2.x ฉันอธิบายว่าเหตุใดจึงควรระมัดระวังเมื่อใช้งานในคำตอบนี้
แต่raw_input
ไม่ได้ประเมินอินพุตและส่งคืนตามที่เป็นอยู่ในรูปแบบสตริง
>>> 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 input
และ Python 2.x raw_input
คล้ายกันและraw_input
ไม่มีใน 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'>)
วิธีการแก้
เพื่อตอบคำถามของคุณเนื่องจาก Python 3.x ไม่ได้ประเมินและแปลงประเภทข้อมูลคุณต้องแปลงเป็นint
s อย่างชัดเจนด้วยint
เช่นนี้
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
คุณสามารถยอมรับตัวเลขของฐานใดก็ได้และแปลงเป็นฐาน 10 โดยตรงด้วยint
ฟังก์ชันเช่นนี้
>>> 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
พารามิเตอร์ที่สองบอกว่าอะไรคือฐานของตัวเลขที่ป้อนจากนั้นภายในจะเข้าใจและแปลงค่านั้น หากข้อมูลที่ป้อนไม่ถูกต้องมันจะส่งไฟล์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'
สำหรับค่าที่สามารถมีส่วนประกอบเศษส่วนประเภทจะเป็นfloat
มากกว่าint
:
x = float(input("Enter a number:"))
นอกเหนือจากนั้นโปรแกรมของคุณสามารถเปลี่ยนแปลงได้เล็กน้อยเช่นนี้
while True:
...
...
if input("Play again? ") == "no":
break
คุณจะได้รับการกำจัดของplay
ตัวแปรโดยใช้และbreak
while True
สำหรับจำนวนเต็มหลายรายการในบรรทัดเดียวmap
อาจจะดีกว่า
arr = map(int, raw_input().split())
หากทราบจำนวนอยู่แล้ว (เช่นจำนวนเต็ม 2 จำนวน) คุณสามารถใช้
num1, num2 = map(int, raw_input().split())
input()
(งูใหญ่ 3) และraw_input()
(งูหลาม 2) เสมอกลับสตริง int()
แปลงผลให้จำนวนเต็มอย่างชัดเจนด้วย
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
คำถามหลายข้อต้องการการป้อนข้อมูลสำหรับจำนวนเต็มหลายตัวในบรรทัดเดียว วิธีที่ดีที่สุดคือป้อนสตริงทั้งหมดของตัวเลขหนึ่งบรรทัดจากนั้นแยกเป็นจำนวนเต็ม นี่คือ Python 3 เวอร์ชัน:
a = []
p = input()
p = p.split()
for i in p:
a.append(int(i))
นอกจากนี้ยังสามารถใช้ความเข้าใจในรายการ
p = input().split("whatever the seperator is")
และในการแปลงอินพุตทั้งหมดจากสตริงเป็น int เราทำสิ่งต่อไปนี้
x = [int(i) for i in p]
print(x, end=' ')
จะต้องพิมพ์องค์ประกอบรายการเป็นเส้นตรง
แปลงเป็นจำนวนเต็ม:
my_number = int(input("enter the number"))
ในทำนองเดียวกันสำหรับตัวเลขทศนิยม:
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()))
for loop จะต้องรันจำนวนครั้ง 'n' 'n' ที่สองคือความยาวของอาร์เรย์ คำสั่งสุดท้ายจะจับคู่จำนวนเต็มกับรายการและรับอินพุตในรูปแบบที่คั่นด้วยช่องว่าง คุณยังสามารถส่งคืนอาร์เรย์ที่ส่วนท้ายของสำหรับลูป
ฉันพบปัญหาในการป้อนข้อมูลจำนวนเต็มในขณะที่แก้ปัญหาบนCodeChefซึ่งควรอ่านจำนวนเต็มสองจำนวน - คั่นด้วยช่องว่างจากหนึ่งบรรทัด
แม้ว่าint(input())
จะเพียงพอสำหรับจำนวนเต็มเดียว แต่ฉันไม่พบวิธีโดยตรงในการป้อนจำนวนเต็มสองจำนวน ฉันลองสิ่งนี้:
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:])
ตอนนี้ฉันใช้ num1 และ num2 เป็นจำนวนเต็ม หวังว่านี่จะช่วยได้
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
ในขณะที่ตัวอย่างของคุณint(input(...))
ไม่หลอกลวงในกรณีใด ๆpython-future
's builtins.input
เป็นมูลค่าการพิจารณาตั้งแต่ที่ทำให้แน่ใจว่าการทำงานของรหัสของคุณสำหรับทั้งงูหลามที่ 2 และ 3 และพฤติกรรมเริ่มต้นพิการ Python2 ของinput
การพยายามที่จะ 'ฉลาด' เกี่ยวกับประเภทการป้อนข้อมูล ( builtins.input
พื้นเพียง มีพฤติกรรมเหมือนraw_input
)