解决Python之谜

时间:2019-02-13 02:34:04

标签: python python-3.x

我应该解决的问题: 谜语者正在计划他的下一个刺山柑 宾夕法尼亚大道。宾夕法尼亚州的地址是一个四位数的数字, 以下属性。

所有四个数字都不相同, 千位数字是十位数的三倍, 这个数字是奇数,并且 这些数字的总和是27。

因此,我做了一个for循环,检查每个四位整数,并将该值放入占位符(即数千,数百等)中,并使用条件if语句来满足条件。但是我的问题是,当我运行代码时,IDE不会给我任何错误,但是它不会在最后输出我的语句。我在弄清楚我的代码出什么问题时遇到了麻烦。

address = 0                     
thousand = 0
hundred = 0
ten = 0
one = 0

for address in range(1000,9999+1):

    thousand = (address/1000)%10    
    hundred = (address/100)%10
    ten = (address/10)%10
    one = (address%10)

if (thousand != hundred) and (thousand != ten) and (thousand != one) and (hundred != ten) and (hundred != one) and (ten !=one):
    if thousand == (3*ten):
        if one % 2 != 0:
            if thousand+hundred+ten+one == 27:
                print("The address is: ",address, "Pennsylvania Ave.") 

它会运行,但不会显示打印语句。

2 个答案:

答案 0 :(得分:3)

  

所有四个数字都不相同,千位数字是十位数字的三倍,数字是奇数,数字总和是27。

  • 千位数字是十位数字的三倍:有效组合为3x1x,6x2x,9x3x。
  • 数字的总和是27:由于27-(6 + 2)> 8 + 7,即最大剩余数字,因此只能使用9x3x。实际上27-(9 + 3)=15。其余数字可以是9,6或8,7
  • 所有四个数字都不相同:不能选择9,5。数字是9837或9738。
  • 这个数字很奇怪: 9837

有些铅笔和纸比这里的for循环效果更好。

话虽如此,请记住/是Python 3中真正的除法运算符,与类型无关。因此,例如address = 6754

thousand = (address / 1000) % 10

评估为

thousand = 6.754 % 10

这只是6.754,而不是您可能希望的6。要获取6,请使用整数除法运算符//

thousand = (address // 1000) % 10

答案 1 :(得分:0)

数论

isop = []

for a in range(1, 10, 1):
    for b in range(0, 10, 1):
        for c in range(0, 10, 1):
            for d in range(0, 10, 1):
                if a!=b and a!=c and a!=d and b!=c and b!=d and c!=d:
                    sum = a+b+c+d
                    if a==3*c and sum == 27:
                        num = a*1000 + b*100 + c*10 + d
                        if num % 2 == 1:
                            isop.append(num)
for i in range(len(isop)):
    print(isop[i])