2015-09-18 3 views
1

Je suis débutant dans la programmation compétitive et pour commencer. Familier avec C et C++, mais Python est ce que j'apprends.Je suis confronté à des difficultés de saisie en Python Problème est comme: Pour un nombre donné de cas de test, pour le cas de test ech, vous recevrez un numéro N et un autre numéro K, dans la même ligne. Après cette ligne, il y aura N entiers dans une seule ligne. Il suffit de diviser et résumer comme indiqué ci-dessous (entre parenthèses sont juste pour garder la trace)Python entrée de stdin dans les juges en ligne

1 #test cases 
3 2 #N #K 
4 5 7 #N integers 

réponse serait sum : 7 qui est 4/2 + 5/2 + 7/2 = 7 (division int)

J'ai écrit un simple programme Python 2.7 pour accepter l'entrée et effectuer l'opération.

t = map(int,raw_input()) 
t = t[0] 
while t>=0: 
    count=0 
    n,k = map(int,raw_input().split()) 
    candies = map(int,raw_input().split()) 
    for candy in candies: 
     count += candy/k 
    t -= 1 

Je reçois l'erreur:

[email protected]:~/Desktop$ python kids_love_candies.py <in.txt >out.txt 
Traceback (most recent call last): 
    File "kids_love_candies.py", line 6, in <module> 
    n,k = map(int,raw_input().split()) 
EOFError: EOF when reading a line 

Une autre link suggère de lire l'entrée à l'aide sys.stdin.readline() mais je ne sais pas comment l'appliquer à mon problème. Lequel dois-je utiliser et pourquoi? Quelle est la bonne façon de les apprendre et de les utiliser?

+0

J'ai exécuté le script en python que vous avez posté 2.7.9, et après la suppression des crochets, tout fonctionnait, le nombre d'impression affiche 7. Avez-vous vérifié les fins de ligne de cette fichier ? est-ce un fichier Linux ou Windows? –

+0

J'utilise ubuntu et le fichier est créé en utilisant du texte sublime et un fichier texte. @CristianoAraujo – vvs14

+0

Le lien vers le compilateur en ligne, le même programme et l'entrée différente soulevant la même erreur. @CristianoAraujo http://ideone.com/iWY71C – vvs14

Répondre

1

Vous essayez de lire un trop grand nombre de lignes, votre condition while doit être > 0. Mais tout cela est plus compliqué que nécessaire

t = int(raw_input()) # no need to map 
for _ in range(t): # loop with range instead of manual counting 
    # loop body 

Quand je veux faire une boucle sur les lignes de stdin, j'utilise généralement sys.stdin à la place. Dans ce cas, vous pouvez ignorer le nombre

raw_input() # ignore the size 
for line in sys.stdin: 
    n, k = (int(i) for i in line.split()) 
    count = sum(int(c) for c in raw_input.split())/k 
+0

Oui, il y a certaines choses dans ce code, qui peuvent être meilleures. Quelle est la meilleure façon de lire les entrées? – vvs14

+0

Je préfère de cette façon quand vous lisez tout depuis stdin. Si vous voulez lire une ligne ou être interactif, utilisez 'raw_input()'. Il y a d'autres façons. –