it-swarm.dev

Jak mohu číst vstupy jako čísla?

Proč jsou x a y řetězce namísto ints v níže uvedeném kódu? Všechno na webu říká, že použít raw_input(), ale já jsem četl na přetečení Stack (na vlákno, které se nezabývalo celým číslem), že raw_input() byl přejmenován na input() v Pythonu 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
241
Hosch250

TLDR

  • Python 3 nehodnotí data přijatá funkcí input, ale funkce input v Python 2 (přečtěte si následující část, abyste pochopili důsledky).
  • Python 2 je ekvivalentem input jazyka Python 3 je funkce raw_input.

Python 2.x

Existovaly dvě funkce pro získání uživatelského vstupu nazvaného input a raw_input . Rozdíl mezi nimi je raw_input nehodnotí data a vrátí se tak, jak je, ve formě řetězce. Ale input vyhodnotí, co jste zadali, a výsledek hodnocení bude vrácen. Například,

>>> 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'>)

Data 5 + 17 je vyhodnocena a výsledkem je 22. Když vyhodnotí výraz 5 + 17, zjistí, že přidáváte dvě čísla, takže výsledek bude také stejného typu int. Konverze typu je tedy provedena pro volné a 22 je vrácena jako výsledek input a uložena v proměnné data. input můžete myslet jako raw_input složené z volání eval .

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

Poznámka: byste měli být opatrní, pokud používáte input v Pythonu 2.x. Vysvětlil jsem, proč byste měli být opatrní při jeho použití, v této odpovědi .

raw_input ale nehodnotí vstup a vrátí se jako řetězec.

>>> 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 je input a raw_input jazyka Python 2.x jsou podobné a raw_input není k dispozici v Pythonu 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'>)

Řešení

K zodpovězení vaší otázky, protože Python 3.x nevyhodnocuje a nekonvertuje datový typ, musíte explicitně převést na ints, s int , jako je tento

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Můžete přijmout čísla libovolné báze a převést je přímo na base-10 s funkcí int, jako je tato

>>> 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

Druhý parametr říká, co je základem zadaných čísel, a pak je interně chápe a převádí. Pokud jsou zadaná data chybná, hodí 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'

U hodnot, které mohou mít zlomkovou složku, by byl typ float spíše než int:

x = float(input("Enter a number:"))

Kromě toho, váš program může být změněn trochu, jako je tento

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

Proměnnou play se můžete zbavit pomocí break a while True

PS: Python neočekává ; na konci řádku :)

260
thefourtheye

V Pythonu 3.x byl raw_input přejmenován na input a Python 2.x input byl odstraněn. 

To znamená, že stejně jako raw_input, input v Pythonu 3.x vždy vrací objekt řetězce.

Chcete-li problém vyřešit, je třeba tyto vstupy explicitně zadat do celých čísel jejich vložením do int :

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Python také nepotřebuje/nepoužívá středníky pro ukončení řádků. Takže mít je neudělá nic pozitivního.

38
iCodez

Pro více integerů v jednom řádku, map může být lepší.

arr = map(int, raw_input().split())

Pokud je číslo již známo, (jako 2 celá čísla), můžete použít

num1, num2 = map(int, raw_input().split())
22
user1341043

input() (Python 3) a raw_input() (Python 2) vždy návratové řetězce. Výsledek převést na celé číslo explicitně pomocí int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Pro tip: v Pythonu nejsou potřeba středníky.

13
Martijn Pieters

Více otázek vyžaduje vstup pro několik celých čísel na jednom řádku. Nejlepším způsobem je zadat celý řetězec čísel jeden řádek a pak je rozdělit na celá čísla.

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
9
gumboy

Převést na celá čísla:

my_number = int(input("enter the number"))

Podobně pro čísla s plovoucí desetinnou čárkou:

my_decimalnumber = float(input("enter the number"))
6
Hemanth Savasere

Vezmeme-li int jako vstup do pythonu: Vezmeme jednoduchý vstup řetězce pomocí:

input()

nyní chceme int as input.so tento řetězec píšeme na int. jednoduše pomocí:

int(input())
6
Rohit-Pandey

V Pythonu 3.x. Ve výchozím nastavení má vstupní funkce vstup ve formátu řetězce. Chcete-li jej převést na celé číslo, musíte zahrnout int (input ())

x=int(input("Enter the number"))
5

Python 3.x má funkci input(), která vrací vždy řetězec.So musíte převést na int

python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

python 2.x

V pythonu 2.x raw_input() a input() funkce vždy vrátí řetězec, takže je musíte převést také na int.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
5
Harun ERGUL
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
3
Sanyal

Setkal jsem se s problémem s integerem při řešení problému na CodeChef , kde dvě celá čísla - oddělená mezerou - by měla být čtena z jednoho řádku.

Zatímco int(input()) je dostačující pro jedno celé číslo, nenašel jsem přímý způsob, jak zadat dvě celá čísla. Zkusil jsem to:

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:])

Nyní používám num1 a num2 jako celá čísla. Snad to pomůže.

3
Aravind
play = True

while play:

    #you can simply contain the input function inside an int function i.e int(input(""))
    #This will only accept int inputs
    # and can also convert any variable to 'int' form

    x = int(input("Enter a number: "))    
    y = int(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
2
uday more
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

smyčka for musí běžet 'n' početrát. druhé 'n' je délka pole. poslední příkaz mapuje celá čísla do seznamu a bere vstup v odděleném formuláři. můžete také vrátit pole na konci pro smyčka.

2
ravi tanwar

Zatímco ve vašem příkladu, int(input(...)) dělá trik v každém případě, python-future 's builtins.input stojí za to zvážit, protože to zajišťuje, že váš kód funguje pro Python 2 i 3 a zakáže výchozí chování input v Python2 se snaží být chytrý "o typu vstupních dat (builtins.input v podstatě jen chová jako raw_input).

2
Tobias Kienzler

Ano, v python 3.x, raw_input je nahrazen input. Chcete-li se vrátit ke starému chování input použití: 

eval(input("Enter a number: "))

To umožní pythonu vědět, že zadaný vstup je celé číslo

1
Waseem Akhtar
play = True

while play:

x = input("Enter a number: ")
y = input("Enter a number: ")

    print(int(x) + int(y))
    print(int(x) - int(y))
    print(int(x) * int(y))
    print(int(x) / int(y))
    print(int(x) % int(y))

    if input("Play again? ") == "no":
        play = False

toto dělá to vědět, že proměnná 'x' a 'y' jsou celá čísla a proto používá je jako celá čísla, jestliže vy chcete to být schopný používat desetinné změny 'int' k 'plavat'.

výstup pro první funkci 

print(int(x) + int(y))

výstup kde x je 3 a y je 7 je 10

0
Gregg Morgan

V případě vstupních dat je vždy považován za řetězec. Takže ji musíte převést do Int. Kód by měl vypadat takto:

play = True

while play:

  x = (input("Enter a number: ")
  y = input("Enter a number: ")

  print(int(x) + int(y))
  print(int(x) - int(y))
  print(int(x) * int(y))
  print(int(x) / int(y))
  print(int(x) % int(y))

  if input("Play again? ") == "no":
    play = False `
0
Tarun Singhal

analyzovat vstup do celého čísla s int

x = int(input("What is x?"))
0
Ewanziak

Spousta lidí rád dělá int(input("etc")), ale pokud vložíte řetězec, zvýší chybu.

Mám rád toto:

s = input("integer: ")
integer = int(s)

Nyní použijte celé číslo pro jakýkoliv účel !!

Navíc, pokud s je řetězec, nevzniká chyba !!!

Alespoň ne okamžitě.

0
user11093202