Jestem nowy w Pythonie i próbuję wziąć kilka wyzwań kodujących, aby poprawić moje umiejętności. Mam zamiar podjąć dane wejściowe:

 2
 3 1
 4 3

Po pierwsze, dostaję wiele przypadków testowych. (2 tutaj), a następnie na podstawie tego, mam podać liczbę przypadków testowych, które są 2 liczbami całkowitymi. 1. jest zasięgiem, a drugi to numer do wyszukiwania w zakresie.
..

Jaki jest prawidłowy, Pyttyczny sposób uzyskania wejścia. Myślałem tak, ale to oczywiście incorrect

num_testcases = int(raw_input())
for i in num_testcases:
    range_limit = int(raw_input())
    num_to_find = int(raw_input())
0
Maxsteel 16 sierpień 2014, 11:06

2 odpowiedzi

Najlepsza odpowiedź

raw_input() będzie czytać jedną linię na raz od STDIN, więc wewnątrz pętli musisz użyć str.split(), aby uzyskać wartość range_limit i num_to_find. Po drugie, nie możesz iterować się na całkowitej liczbie całkowitej ({x4}}), więc trzeba użyć xrange() (Python 2) lub {x6}} (Python 3):

num_testcases = int(raw_input())
for i in xrange(num_testcases): #considering we are using Python 2
    range_limit, num_to_find = map(int, raw_input().split())
    #do something with the first input here 

Demo:

>>> line = '3 1'
>>> line.split()
['3', '1']
>>> map(int, line.split())
[3, 1]

Zauważ, że w Pythonie 3 będziesz musiał użyć input() zamiast raw_input() i range() zamiast xrange(). range() będzie działać zarówno w Pythonie 2, jak i 3, ale zwróci listę w Pythonie 2, więc zaleca się używanie xrange().

1
Ashwini Chaudhary 16 sierpień 2014, 07:21

Użyj for i in range(num_testcases): zamiast for i in num_testcases. Spójrz na range (lub xrange w Pythonie 2). range(a) wytwarza iterable z 0 do a - 1, więc kod zostanie nazwany żądaną liczbą razy.


Również raw_input i raw_input należy wziąć wejście na napotkanie nowej linii, co oznacza, że w range_limit = int(raw_input()) raw_input zwraca "3 1", które nie możesz po prostu przekonwertować na { {X5}}. Zamiast tego chcesz Split ciąg za pomocą string.split, a następnie przekonwertuj poszczególne elementy:

num_testcases = int(raw_input())
for i in range(num_testcases):
    range_limit, num_to_find = [int(x) for x in raw_input().split()]
1
hlt 16 sierpień 2014, 07:16