找出肇事者,循环与布尔逻辑(高教社,《Python编程基础及应用》习题6-6)

题目

在视线不太好的黑夜一司机撞伤行人之后逃逸,有3个目击者记住了该车的部分车号特征。
甲说:“车牌号的前两位相同,且末位数是奇数”;乙说:“车牌号的后两位加起来等于5”;
丙说:“车牌号是一个N位数,并且能被3整除”。请你写一个程序,该程序接受一个正整数N(>=3),
找出肇事车可能的车牌号。

输入格式:

一个>=3的正整数

输出格式:

全部可能的车牌号(一行一个,按递增序)

输入样例: 

3

输出样例:

441

解题

题目代码:

N = int(input())
for i in range(10**(N-1),10**N):
    if i % 2 == 1 and i//10**(N-1)==i//10**(N-2)%10:
        if i%10 + i//10%10 == 5 and i%3 == 0:
            print(i)

代码解释:

第二行利用for循环对range生成的range list进行遍历,范围是[10**(N-1),10**N-1]

比如输入N为3,所以范围为[100,999]

第三行是通过if判断i是否为奇数以及i的前两位是否相同

第四行是判断最后两位加起来是否为5以及i是否被3整除

代码内相关内容解释:

range(10**(N-1),10**N)

这样range生成的数都是N位

//

向下取整(丢弃小数)

i//10**(N-1)    i//10**(N-2)%10

这样分别是取出了i的第一位和第二位

i%10    i//10%10

这样分别是取出来i的最后一位和倒数第二位

**的优先级高于//

总结

此题目主要是考查对//和%的掌握,直接看代码可能不太好理解,可以结合说明进行对比阅读,然后就是range取值范围可以理解一下,整体来说题目难度适中

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值