Comment lire plusieurs lignes d'entrée en python
Je suis nouveau sur le Python et j'essayais de faire de l'exercice une interviewstreet problème de l'Uni de la Connectivité. Bien que, j'ai réussi à résoudre le problème, je vais avoir du mal à donner de l'entrée de la format donné, j'ai essayé ma solution sur mon système et la sortie est correcte, mais dès que je compile, il n'y a pas de sortie.
Entrée est de la forme:
5 5
1 2
2 3
3 4
1 3
4 5
S'il vous plaît, m'aider à comprendre comment résoudre ce problème.
Actuellement, je suis à la prise d'entrée de raw_input()
dans une boucle et de fractionnement à l'aide de a.split(' ')
.
Voici une partie de la question:
**Input Description:**
First line contains two integers N and M.
Then follow M lines ,each having two integers say x and y, 1<=x,y<=N , indicating there is a road from city x to city y.
**Output Description:**
Print the number of different paths from city 1 to city N modulo 1,000,000,000(10^9).If there are infinitely many different paths print "INFINITE PATHS"(quotes are for clarity).
**Sample Input:**
5 5
1 2
2 4
2 3
3 4
4 5
**Sample Output:**
2
**Sample Input:**
5 5
1 2
4 2
2 3
3 4
4 5
**Sample Output:**
INFINITE PATHS
, Voici ma solution
import sys
import numpy as np
c=0
x=raw_input()
y=x.split(' ')
l=(int(y[0]),int(y[1]))
e=[raw_input() for i in range(l[1])]
f=[e[i].split(' ') for i in range(l[1])]
a=[map(int,i) for i in f]
b=[[0 for i in a] for j in range(l[0])]
for i in range(l[0]+1):
for j in range(l[0]+1):
if [i,j] in a:
b[i-1][j-1]=1
elif a[i-1][0]>=a[i-1][1]:
print "INFINITE PATHS"
sys.exit(0)
for i in range(0,l[1]):
d=np.linalg.matrix_power(b,i+1)
c+=d[0][l[1]-1]
print c
Voici la capture d'écran
Montre-nous ton code pour qu'on puisse voir où l'erreur se trouve.
Btw -- est-ce devoirs? Si oui, merci de balise en tant que tel.
j'ai édité et ajouté mon code
en quoi est-ce devoirs? j'ai un véritable problème, je ne demande pas de faire mon code, j'ai juste besoin d'aide pour l'entrée de la partie,ce serait génial si je obtenir de l'aide,parce que dans toutes les autres questions,même problème, je suis confronté à
Que signifie "il n'y a pas de sortie"? Êtes-vous sûr que le problème est de comment faire de l'entrée?
Btw -- est-ce devoirs? Si oui, merci de balise en tant que tel.
j'ai édité et ajouté mon code
en quoi est-ce devoirs? j'ai un véritable problème, je ne demande pas de faire mon code, j'ai juste besoin d'aide pour l'entrée de la partie,ce serait génial si je obtenir de l'aide,parce que dans toutes les autres questions,même problème, je suis confronté à
Que signifie "il n'y a pas de sortie"? Êtes-vous sûr que le problème est de comment faire de l'entrée?
OriginalL'auteur sum2000 | 2012-03-19
Vous devez vous connecter pour publier un commentaire.
Je trouve votre programme difficile à comprendre. Donc, je l'ai réécrit, et je pense que ma version est un peu plus facile à comprendre.
Ma version n'a imprimer
2
quand donné l'exemple d'entrée.Voici certaines des choses que j'ai compris, j'ai travaillé sur ce:
La première ligne nous donne des constantes (
N
etM
dans la documentation, représentant le max de valeur juridique et le nombre de chemins respectivement). Vous devez enregistrer ces valeurs dans des variables avec des noms, plutôt que de les mettre dans une liste et de se référer à eux par l'indice de la liste. J'ai utilisé les noms demax_val
etnum_paths
. Vous avez vous-même fait une erreur: vous êtes censé trouver les chemins de la ville de 1 pour la ville de N, de sorte que le chèque à la fin devrait êtred[0][max_val - 1]
; vous avez utilisél[1]
qui estnum_paths
plutôt quel[0]
.b
doit être une matrice carrée. Votre code a été réglage de la largeur en fonction de la longueur dea
, maismax_val
etnum_paths
peut-être pas toujours égale, de sorte que, d'une manière dangereuse pour le faire.Il est étrange de faire une boucle sur chaque point de la matrice carrée et vérifier pour voir si elle doit être définie en tant que 1 ou pas. Il est également très inefficace, en particulier parce que les
in
test est O(n) où n est la longueur du tableaua
. Au lieu de cela, construire la place vide de la matrice, et puis tout simplement en boucle sur les chemins d'accès et définissez les valeurs 1 par chemin.De même, il est étrange de valider les valeurs d'entrée dans la boucle qui initialise la matrice carrée; il est préférable de valider les valeurs d'entrée lorsqu'elles sont lues dans la boucle d'entrée. Et encore, il est dangereux, parce que
num_paths
peut-être rien à voir avecmax_val
. Aussi il est inefficace, parce que vous avez le contrôlea[i-1][0]
contrea[i-1][1]
une fois par colonne dansb
; que la comparaison n'utilise pas la valeurj
à tous. Vous faisiez chaque case à cinq fois; il suffit de faire chaque case à la fois.Il y a un Python, un langage que j'ai utilisé, où vous pouvez utiliser
_
(un seul trait de soulignement) comme le nom d'une variable lorsque vous n'avez pas de soins sur la valeur de cette variable. Lorsque nous sommes juste faire quelque chose d'un certain nombre de fois avec une boucle, et nous ne serons pas à l'aide de la boucle de contre-valeur à quelque chose, j'ai utilisé un_
que la variable de compteur de boucle. Ce n'est pas essentiel, bien sûr.Pour répondre à votre question: je ne vois pas de moyen possible pour que votre programme de ne pas produire de sortie. Je soupçonne qu'il pourrait y avoir un problème sur le serveur qui exécute ce test de problème. Votre programme doit toujours imprimer "INFINI CHEMINS" ou bien une sorte de valeur de type entier.
P. S. je n'ai pas vraiment à comprendre comment le programme fonctionne; la description du problème, vous devez fournir un certain nombre de chemins modulo 1e9, et je ne vois rien de la faire respecter.
OriginalL'auteur steveha
Vous pouvez lire l'entrée spécifié comme suit:
utilisation
a.append([x, y])
(après initialisationa = []
avant la boucle)N'est-ce pas équivalent à ce que l'OP n'?
merci, aussi,pourquoi ma démarche n'est pas de travail?
j'ai vérifié tout à l'heure, c'est encore de ne pas prendre d'entrée, est-il correct?
OriginalL'auteur Giuliano Vilela
si vous avez l'entrée dans un fichier input.txt dans le même dossier que le script:
si l'entrée est passée comme argument de ligne de commande:
si ce n'est pas un argument de ligne de commande, ni d'un fichier d'entrée, je ne pense pas que nous pouvons trouver en deviner sans demander la tâche donneur / lire toutes les instructions
l'énoncé du problème est donc assez clair: l'entrée est tout simplement l'entrée standard, et sum2000 est correctement à l'aide de
raw_input()
pour lire l'entrée. Vous pouvez tester votre entrée en copiant l'exemple des nombres de l'énoncé du problème, et en les collant dans le programme Python comme il est en cours d'exécution; ou en les mettant dans un fichier et de la tuyauterie le contenu du fichier par le biais du programme en Python.OriginalL'auteur Aprillion