警察局抓了a,b,c,d四名偷窃嫌疑犯,其中只有一人是小偷。审问中
a说:“我不是小偷。”
b说:“c是小偷。”
c说:“小偷肯定是d。”
d说:“c在冤枉人。”
现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?
问题分析:将a, b, c, d将四个人进行编号,号码分别为1,2,3,4。则问题可用枚举尝试法来解决。
算法设计:用变量x存放小偷的编号,则x的取值范围从1取到4,就假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成:
a说的话:x!=1
b说的话:x == 3
c说的话:x==4
d说的话:x != 4或not(x ==4)
注意:在x的枚举过程中,当这四个逻辑式的值相加等于3时,即表示“四个人中三人说的是真话,一人说的是假话”。
算法如下:
x=1
for x in range(2,4):
if((x!=1)+(x==3)+(x==4)+(x!=4)==3):
print(chr(64+x),"is a thief .");、
判断一个4位整数是否为回文数
问题分析:回文数例子,1221是回文数,因为其千位与个位互换,百位和十位互换后,仍是它本身
计算模型:设输入数为n,则有
(1)取出每一位的值
n的千位:a=n//1000
n的百位:b=n//100%10
n的十位:c=n//10%10
n的个位:d=n%10
(2)构成逆序数
m=d1000+b100+c*10+a
(3)n==m?
代码如下:
n=input("请输入一个四位数:")
n=int(n)
a=n//1000
b=n//100%10
c=n//10%10
d=n%10
m=d*1000+c*100+b*10+a
result=(n==m)
print("回文数的判断结果是:", result)
判断是否为闰年
问题分析:
(1)能被4整除不能被100整除
(2)能被400整除
计算模型:设输入数为y,则有
(1)y%4== 0 and y%100!=0
(2)y%400==0
stry=input("请输入年份:")
y=int(stry)
result=(y%4==0 and y%100!=0) or (y%400==0)
print("闰年的判断结果为:",result)
将输入的字符转换为小写,并输出其ASCII值
提示:
条件表达式为 z if x else y
获得字母的ASCII值函数ord()
字符转换函数chr()
大写字母为‘A ’~‘Z’
c=input("请输入一个字符:")
y=(c if(c>='a' and c<='z') else chr(ord(c)+32))
print("字符:",c,",ASCII:",ord(c),",转换为:",
y,",ASCII:",ord(y))
汉诺(Hanoi)塔问题。
def Hanoi(n,ch1,ch2,ch3):