0

我想写一个python程序,首先它要求你输入两个数字,然后输出两个数字之间的所有水仙花数字,它会继续运行,直到我输入一个“q”。我写了一个程序,但它是错误的:

#coding=utf-8

while 1:
    try:
        x1=int(raw_input("please enter a number x1="))
        x2=int(raw_input("please enter a number x2="))
    except:
        print("please enter only numbers")
        continue
    if x1>x2:
        x1,x2=x2,x1
        pass
    for n in xrange(x1,x2):
        i=n/100
        j=n/10%10
        k=n%10
        if i*100+j*10+k==i+j**2+k**3:
            print ("%-5d")%n
        pass

有人可以帮忙吗?我认为它应该很简单,但我无法正确编写它。

4

5 回答 5

1

我相信你误解了问题陈述。试试这个:

if i*100+j*10+k==i**3+j**3+k**3:

参考:http ://en.wikipedia.org/wiki/Narcissistic_number

于 2013-11-04T17:13:29.357 回答
1
for n in xrange(x1,x2):
    digits = map(int,str(n))
    num_digits = len(digits)
    if sum(map(lambda x:x**num_digits,digits)) == n:
       print "%d is a magic number"%n

您仍然会遇到无法输入“q”的问题,因为您强制输入为整数

于 2013-11-04T17:21:43.940 回答
0

我想谈谈这个quit事件。

while True:
    x1 = raw_input("please enter a number x1=")
    x2 = raw_input("please enter a number x2=")
    quit = ('q','Q')
    if x1 in quit or x2 in quit:
        break
    else:
        try:
            x1, x2 = int(x1), int(x2)
        except:
            print("please enter only numbers")
            continue
    # The mathematical part... (for completeness) (not my code)
    if x1>x2:
        x1,x2=x2,x1
    for n in xrange(x1,x2):
        i=n/100
        j=n/10%10
        k=n%10
        if i*100+j*10+k==i+j**2+k**3:
            print "%-5d"%n

仅当您在某些代码块pass中没有要执行的任何内容时才使用该语句。它什么都不做,所以如果不需要,不要使用它。它的存在是为了使代码看起来干净且缩进正确。

if some_thing: # don't do anything
else:
    some_thing = some_thing_else

注意上面的 if 语句在语法上是不正确的。这是pass派上用场的地方。比如说,您决定if稍后再编写该部分,在此之前您必须提供pass.

if some_thing: # don't do anything
    pass
else:
    some_thing = some_thing_else
于 2013-11-04T17:26:53.423 回答
0
while True:
    x1 = raw_input("please enter a number x1=")
    x2 = raw_input("please enter a number x2=")
    quit = ('q','Q')
    if x1 in quit or x2 in quit:
        break
    else:
        try:
            x1, x2 = int(x1), int(x2)
        except:
            print("please enter only numbers")
            continue
    if x1>x2:
        x1,x2=x2,x1
        pass
    for n in xrange(x1,x2):
        i=n/100
        j=n/10%10
        k=n%10
        if i*100+j*10+k==i+j**2+k**3:
            print ("%-5d")%n
        pass

我有!谢谢阿什!这正是我想要的!我会退出 wenn 我输入 q!多谢!

于 2013-11-05T19:50:25.910 回答
0

在没有更多提示的情况下知道发生了什么有点棘手,但我马上看到了一些问题:

  1. 您需要与 Python 中的缩进保持一致。您的最后一个if语句比它上面的语句缩进更少(如前一个iffor循环)。这将导致错误。您还在其他地方使用了不同数量的缩进,但因为它不是不一致的,所以是允许的(如果是个坏主意)。通常最好选择一个缩进标准(如四个空格)并坚持下去。通常你可以设置你的文本编辑器来帮助你(在设置中打开“将标签扩展到空格”或其他东西)。
  2. 您有两个pass不需要或有害的陈述。第一个,在if x1>x2: x1,x2=x2,x1将导致错误的行之后。如果您在复合语句的末尾放置了一系列简单语句(例如if. 要么将作业放在自己的行上,缩进,要么去掉pass. 代码末尾的最后一个pass不是错误,只是不必要的。
  3. 您在try语句的末尾缺少一个冒号。Python 中每条引入缩进套件的语句都以冒号结尾,因此应该很容易了解需要它们的地方。
于 2013-11-04T17:13:36.200 回答