??这里,才 python 前沿。可惜是英文原版。所以,我要练习英文阅读。🧐🧐
??自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
????????????—— 华罗庚
练习:个性计算器
- 计算器主界面
- 菜单显示
- 菜单确认
- 简单计算器
- 完整代码
??看到大佬博文《【C语言】计算器》,诱发我也想 py 一个。 ??设想:我还不会 gui 界面编码,就只能码个程序 print Menus 的了。 ??鉴于 python 有 eval() 内置函数,她可以把字符串转化为代码语句并执行,所以“计算器”的简单计算直接输入四则混合运算的式子(数学表达式)就可以了。input() 接收输入字符串,直接调用 eval() 计算输出结果,实现简单的“四则混合运算”。 ??对于乘方开方对数三角函数等高级计算,就需加载 python 的 math 的相应方法。还可以做一些个性计算,比如圆周长面积、长方体表面积体积(正方体是特殊的长方体,可以不单列)……可以尽情释放您的思绪。🤪🤪 ??对于写代码样式,我更喜欢函数式编程。当然采用自定义函数编写功能模块了。
??通过一天的“业余”调试,我炼的 python 版“计算器”,基本可以上“笔记”了。🤗🤗
回首页
计算器主界面
def main():
'''计算器主执行代码块'''
while True:
menu_show()
is_menu()
回首页
菜单列印
??这次不象以前练习,设计为动态菜单列表。如需添加菜单项,只需把菜单项字符串放在列表相应位置就好。 (注意:增加菜单后,记得到“菜单确认”模块修改 range() 合法菜单选择范围,不然无法选中新增菜单序号。并增添相应的 elif 选项。)
def menu_show():
'''菜单打印模块,无需参数传递'''
menus = ('简单计算', '素数查找', '退出')
print(f"\n\n{color(1, 'f_green')}{'':*^41}\n{'星月计算器':^36}\n{'(Stars&Moon Calculator)':^42}\n{'【':>10}{localtime_show()}】\n{'':-^41}{color(0)}")
for k,i in enumerate(menus):
if i != '退出':
print(f"\n{k+1:>16}. {i}")
else:
exit_s = f" {0}. {i} "
print(f"\n{'':>13}{exit_s:=^13}")
print(f"\n{color(1, 'f_green')}{'':-^41}\n{'Author:Dream-elf_cq':^41}{'(梦幻精灵_cq)':^37}\n{'':*^41}{color(0)}")
回首页
菜单确认
def is_menu():
'''菜单确认'''
while True:
try:
menu = int(input(f"\n\n{'菜单选择:':>12}"))
if menu not in range(3):
error_show()
input(f"\n{'错误类型:没有此项菜单!':-^29}")
break
except Exception as error:
error_show()
input(f"\n错误类型:{error}")
if menu == 0:
exit()
elif menu == 1:
less_count()
elif menu == 2:
find_primes()
回首页
简单计算器
??虽言简单计算器,但只要是符合 python 规范的表达式,都能有结果输出。 ??这,足见 eval() 之强了吧。🤪🤪
注意:由于 {}、[ ]在python 中另有定义,所以在本“计算器”中输入计算表达式,{}、[ ] 皆用成对的 () 替代,不影响结果输出(这也符合 python 规范)。所以,我规定了“计算器”的“计算表达式”字符集,超出范围报错重输。
如:
------简单计算器(数学四则混合运算)-------
计算表达式输入:(2*(6-(2+2)))
结果:4.0000
另:本“计算器”从 python “脱模”而来,所以“计算表达式”“无视”空格的存在(英文空格)。 如:
??虽然三种写法一样,但我建议第一种( python 风格的“标准”写法);千万别写成第三种,虽然也能得相同结果,但看着“别扭”不是。😜
??还可以完成乘方开方等“高级”一点儿的操作。😜😜
??计算 3 的平方、16 的平方根、81 的四次方根。(求 n 次方根,不要写成 “16 ** 1/2”、“81 ** 1/4”,那样就成了“16 的一次方除以 2 ”、“81 的一次方除以 4 ”。)
def less_count():
s = '''简单计算器(数学四则混合运算)'''
def in_rules():
'''解析计算表达式合规符号集群'''
rules = []
rules.extend([str(i) for i in range(10)])
rules.extend(list(' +-*/()'))
rules.extend([chr(i) for i in range(65,91)])
rules.extend([chr(i) for i in range(97,123)])
return tuple(rules)
while True:
in_s = input(f"\n\n{s:-^28}\n\n\n{'计算表达式输入:'}")
if in_s == '':
return
for i in list(in_s):
if i not in in_rules():
error_show()
input(f"\n{'错误类型:输入非法字符!':-^29}")
else:
break
input(f"\n\n{'结果:':>12}{eval(in_s):.4f}\n\n{'':*^41}")
less_count()
回首页
回首页
完整 Python 代码
??我的解题思路,已融入代码注释,博文中就不再赘述。
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
回首页
上一篇:?求偶数和、阈值分割和求差( list 对象的两个基础小题 )
下一篇:?练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
我的HOT博:
推荐条件
点阅破千
回首页
精品文章:
来源:老齐教室
回首页
好文力荐:
CSDN实用技巧博文:
|