Python代码没有

时间:2014-11-03 06:38:03

标签: python

我是python的新手,试图编写用于查找amstrong和模数的程序。但是我找到amstrong没有问题,它不会进入结束状态,挂在中间。但是,模数工作正常。它不会抛出任何错误。这是我的代码:

     try:
       def check(s):
         if(s==1):

           print 'enter the no'
           v=[]
           s=int(raw_input())

           print s
           for x in str(s):
              print x
              v.append(x)
           print v
           x=len(v)
           i=0
           y1=0
           print v[0]
           while(i<x):

             y=int(v[i])

             y=y**3
             y1=y1+y

           print y1
           if(y1==s):
             print "given no",s,"is amstrong no"
           else:
            print "given no",s,"is not a amstrong no"
         elif(s==2):


          print 'enter the 1st no'

          s=int(raw_input())
          print 'enter the 2nd no'

          s1=int(raw_input())
          ans=s%s1
          print 'modulus ans is',ans
      finally:
        print "bye bye"


   try:

    print "1.amstrong 2.modulus"
    x=int(raw_input())
    if(x>=1 and x<=2):

      check(x)
  finally:
    print 'bye bye'

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:5)

它挂在中间的原因是你进入while循环while(i<x):,但你永远不会改变i或{{1}的值}。 (你确实改变了xy,但是你的条件并不涉及。)条件永远不会变成虚假,并且永远不会变成虚假,所以它继续永远执行。

另请注意,您并未正确使用y1块。除非您使用try来处理任何异常,否则使用try毫无意义。 (在不同的层面上,您不应该首先在except块中包含整个代码 - 例外是有用的信息,可以更容易地发现您的程序不是正确工作,忽略它们会导致不可预测,难以调试的状态。)

最后一条建议 - 通过对变量使用不同的,相关的名称来识别和解决问题几乎普遍变得更容易(对我们两个人来说) - 很难弄清楚你的问题是什么在每个变量都是一个字母的时候做,有些只是你已经使用过的数字的字母。

答案 1 :(得分:0)

您可以使用下面编码的功能检查数字是否是3位数的ammstrong。 然而,这仅限于3位数,但正确使用循环,这也可以使用更多的数字。几乎就像你做的那样。但是总是记得增加或减少循环计数器以防止无限循环。否则循环&#34;将不会进入结束状态,挂在中间&#34;。

 def Ammstrong(s):

     n1=s/100
     #n1 contains the 1st digit of number, s.

     n2=s%100
     n2=n2/10
     #n2 contains the 2nd digit of number, s.

     n3=s%10
     #n3 contains the 3rd digit of number, s.

     number=(n1**3)+(n2**3)+(n3**3)
     if number==s:
     print number,"is an Ammstron Number" 
     #return number
     else: 
     print number,"is not an Ammstron Number"
     #return number
num=input(Enter a number: ")
Ammstrong(num)
#use this if return is uesd:
#number=Ammstrong(num)

此功能将打印答案。因此,不需要在main函数中使用print函数来打印你的答案。

如果您希望进行进一步的计算,请使用&#39; return&#39;。这在使用注释的编码中说明。但是,只要执行返回执行,执行语句的程序就会终止。意味着该函数将终止而不是主程序。因此,在打印功能之后使用返回功能。 如果确实使用了返回函数,则必须将返回的值存储在变量中。

还有一件事: 在启动变量x之前,您已经使用了变量x。 并且,而不是使用(s == 2)语句使用(s!= 0)。 &#34;!=&#34;是&#34;不等于&#34;

的符号

学习python好运。这是一种非常有趣的语言。

http://pythontutor.com将逐步显示代码的执行情况。