8层宝塔上共有765盏琉璃灯,每层灯数都是上层的一倍,编程输出每层灯数。
(笔记模板由python脚本于2024年01月09日 16:41:22创建,本篇笔记适合熟悉循环编程的coder翻阅)
Python 官网:https://www.python.org/
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
解析
宝塔仅8层,数值不太大,可以用简单粗暴的“枚举”算法。琉璃灯数必须是整型且最小为1,从1开始遍历自然数(把遍历到的当前自然数作这顶层宝塔的琉璃灯数),当8层宝塔琉璃灯总数刚好是给定的琉璃灯总数时,打印出每层灯数;否则打印“琉璃灯总数是“n”时,无解!”
代码运行效果截屏图片
Python代码
def count(n):
for i in range(1, n):
lights = [i]
for j in range(7):
i = i<<1
lights += [i]
if sum(lights) == n:
result = lights
break
else:
result = []
if not result:
print(f"\n琉璃灯总盏数为“{n}”,无解。")
return
print('\n输出:')
for i in range(8):
print(f"{8-i}层{result[i]}盏")
if __name__ == '__main__':
count(int(input(f"\n输入琉璃灯总盏数:")))
仔细阅读前面的代码,会发现是有“毛病”的。我把数据改写成了input(),就会有两个问题:1、用户输入可能存在非法,得拦截;2、要是输入的n是一个非常大且“无解”的整型数哩,程序不得一直遍历完1~n的整型数啊!磨叽半天才输出“无解”。
修正buh的代码
def count(n):
for i in range(1, n):
lights = [i]
for j in range(7):
i = i<<1
lights += [i]
if sum(lights) == n:
result = lights
break
elif sum(lights) > n:
result = []
break
else:
result = []
if not result:
print(f"\n琉璃灯总盏数为“{n}”,无解。")
return
print('\n输出:')
for i in range(8):
print(f"{8-i}层{result[i]}盏")
if __name__ == '__main__':
count(int(input(f"\n输入琉璃灯总盏数:")))
用“ t r y : . . . e x c e p t : . . . try:...except:... try:...except:...”拦截异常。
Python代码
if __name__ == '__main__':
while True:
try:
count(int(input(f"\n输入琉璃灯总盏数:")))
break # 正确输入,退出输入循环。
except:
print(f"\n\n{' 输入错误!请重试。':~^31}")
python代码
if __name__ == '__main__':
while True:
try:
count(int(input(f"\n输入琉璃灯总盏数:")))
break # 正确输入,退出输入循环。
except Exception as error:
print(f"\n\n{' 输入错误!请重试。':~^31}\n\n错误类型:{error}\n{'':~^40}\n\n")
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
def count(n):
for i in range(1, n):
lights = [i]
for j in range(7):
i = i<<1
lights += [i]
if sum(lights) == n:
result = lights
break
elif sum(lights) > n:
result = []
break
else:
result = []
if not result:
print(f"\n琉璃灯总盏数为“{n}”,无解。")
return
print('\n输出:')
for i in range(8):
print(f"{8-i}层{result[i]}盏")
if __name__ == '__main__':
while True:
try:
count(int(input(f"\n输入琉璃灯总盏数:")))
break # 正确输入,退出输入循环。
except Exception as error:
print(f"\n\n{' 输入错误!请重试。':~^31}\n\n错误类型:{error}\n{'':~^40}\n\n")
我的HOT博:
本次共计收集289篇博文笔记信息,总阅读量44.72w。数据采集于2023年12月11日 23:07:13,用时5分11.8秒。阅读量不小于4.0k的有17篇。
截屏图片
精品文章:
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: