为什么我不能在Python中获得输出?

时间:2015-01-19 04:16:49

标签: python list indexing output

 def travel():
   travel.s=0
   travel.frate=[]
   travel.tr=[]
   def accomodation():                       
                                         print"""specialises
                                         1.place 1
                                         a.hotel 1
                                         b.hotel 2
                                         Hotel1:ac/non ac rooms
                                         Ac.for ac...
                                         Noac.for non ac...."""
                                         hd=[5000,6000]
                                         hg=[4000,7000]
                                         TAc=[1000]
                                         Nac=[400]
                                         ch5=input("Enter your choice")
                                         fav=raw_input("ENter hotel choice")
                                         mode=raw_input("Enter ac/no ac")
                                         if(ch5==1):
                                                for i in hd:
                                                       frate=hd[i]+TAc

                                                else:
                                                       frate=hd[i]+Nac
                                         if(ch5==2):
                                                for i in range(0,2,1):
                                                       frate=hg[i]+TAc
                                                else:
                                                       frate=hg[i]+Nac
  accomodation()
travel()

当我运行程序时,我得到的错误是List Index超出范围。但是在hd和hg列表中,只有两个元素,所以索引号将从0开始?有什么我应该导入??我甚至发表了这样的陈述:

  travel.frate=travel.hg[i]+TAc

但它仍然没有来。谢谢你的努力。 缩进现在是正确的,但输出仍未到来。

1 个答案:

答案 0 :(得分:1)

您遇到的具体问题是由以下行引起的:

if(ch5==1):
    for i in hd:
        frate=hd[i]+TAc

hd[i]查看将引发IndexError的hd[5000]hd[6000]

但是如果你解决了这个问题,你就会遇到另一个错误,因为

frate=hd[i]+TAc

尝试将列表TAc添加到整数hd[i],这是一项不受支持的操作。您可能需要frate=hd[i]+TAc[0],甚至更好,使TAc成为数字而不是列表。此问题也会出现在代码的其他位置。

最后,虽然现在没有在代码中造成明确的问题,但还有另外两个问题:

  1. ch5=input("Enter your choice")很危险,因为input告诉Python运行用户输入的任何代码段。在这种情况下,做ch5=int(raw_input("Enter your choice"))

  2. 会更安全
  3. for i in range(0,2,1):实际上是for i in range(2): - 如果您需要更改它们的默认值,即0和1,则只使用起始索引和跳转参数。

  4. 还有其他一些问题,例如变量范围(您希望从住宿内修改travel.frate,但是没有发生)以及在travel.frate等函数中定义变量(不是无效的)语法,但绝对奇怪)但这些可能更好地解决了这个问题。