ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在python中读取多行输入

2019-11-01 15:58:00  阅读:1104  来源: 互联网

标签:raw-input input python


我是Python的新手,我想尝试解决Kingdom Connectivity的访谈街问题.尽管我设法解决了问题,但是在输入给定格式的输入时遇到了麻烦,但是我已经在系统上尝试了解决方案,并且输出正确,但是只要在此处编译,就没有输出.

输入的形式为:

5 5
1 2
2 3
3 4
1 3
4 5

请帮我弄清楚如何解决这个问题.

目前,我正在循环中从raw_input()获取输入,并使用a.split(”)进行拆分.

这是问题的一部分:

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

这是我的解决方案

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

这是截图

解决方法:

我发现您的程序难以理解.因此,我重写了它,并且认为我的版本更容易理解.

import sys
import numpy as np


line = raw_input()
max_val, num_paths = (int(n) for n in line.split())


# a will be a list of tuples of int, taken from the input.
#
# Each tuple represents a path, so this is effectively a sparse representation
# of a square matrix of possible paths.
#
# Input city numbers are 1-based, but we will treat them as 0-based, so
# subtract 1 from each value before appending to array a.

a = []
for _ in xrange(num_paths):
    line = raw_input()

    # TRICKY: subtract 1 to convert from 1-based to 0-based city numbers
    tup = tuple(int(n)-1 for n in line.split())

    if len(tup) != 2:
        raise ValueError, "input should only have two values per line"
    for n in tup:
        if not 0 <= n < max_val:
            raise ValueError, "value must be in range [1, %d]" % max_val
        if tup[0] >= tup[1]:
            #raise ValueError, "INFINITE PATHS"
            print "INFINITE PATHS"
            sys.exit(0)
    a.append(tup)


# Expand the sparse matrix representation into an actual square matrix.
# It should have a 1 anywhere a path was indicated with a tuple in list a,
# and a 0 everywhere else.
b = [ [0 for _ in xrange(max_val)] for _ in xrange(max_val)]
for i, j in a:
    b[i][j] = 1


c = 0
for i in xrange(num_paths):
    d = np.linalg.matrix_power(b, i + 1)
    c += d[0][max_val - 1]
print c

输入示例输入后,我的版本会打印2.

在进行此工作时,我想到了以下几点:

第一行提供了常量(文档中的N和M,分别代表最大合法值和路径数).您应该将这些值保存在具有良好名称的变量中,而不是将它们放在列表中并通过列表索引引用它们.我使用了名称max_val和num_paths.您自己犯了一个错误:您应该找到从城市1到城市N的路径,因此末尾的检查应该为d [0] [max_val-1];您使用的是l [1],它是num_paths而不是l [0].

b应该是一个正方形矩阵.您的代码基于a的长度设置宽度,但是max_val和num_paths可能并不总是相等的,因此这是一种危险的方式.

遍历方阵中的每个可能点并检查是否应将其设置为1,这很奇怪.这也是非常低效的,尤其是因为被测对象是O(n),其中n是数组a的长度.取而代之的是,建立空的方矩阵,然后简单地在路径上循环并为每个路径设置1个值.

同样,在初始化方阵的循环中验证输入值也很奇怪.最好在输入循环中读取输入值时对其进行验证.这又很危险,因为num_paths可能与max_val无关.这也是低效率的,因为您要对b中的每一列分别对a [i-1] [0]和a [i-1] [1]进行一次检查;该比较根本不使用值j.您每次检查五次;一次检查就足够了.

我使用了一个Python习惯用法,当您不关心变量的值时,可以在其中使用_(单个下划线)作为变量的名称.当我们只用循环执行一定次数的操作,而我们不会将循环计数器的值用于任何事情时,我使用_作为循环计数器变量.当然这不是必需的.

要回答您的实际问题:我看不出您的程序不产生输出的任何可能方式.我怀疑运行此测试问题的服务器上可能存在问题.您的程序应始终打印“ INFINITE PATHS”或其他某种整数值.

附言我实际上不了解您的程序如何工作;问题描述说您应该提供许多模数为1e9的路径,但我看不到有什么可强制执行的.

标签:raw-input,input,python
来源: https://codeday.me/bug/20191101/1984506.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有