这篇文章主要讲解了“Python怎么计算球的个数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么计算球的个数”吧!
代码如下:
# author: DE8UG
# 创建垃圾桶和垃圾
# 规则:k:v,一个k对应一个v,代码表示用冒号分割
# 输入
# 判断
# 保存
# 函数
# 综合
import json
rule = {
"湿垃圾": ["菜叶", "橙皮", "葱", "饼干"],
"干垃圾": ["旧浴缸", "盆子", "海绵", "卫生纸"]
}
# print('加载文件:', ljt_gan)
def load_data(filename):
with open(filename) as f:
data = json.load(f)
return data
def reng_laji(rule_k, laji, ljt):
if rule_k == ljt['name']:
ljt['data'].append(laji)
def fenlei(laji, rule, ljt):
for k, v in rule.items():
print(k, v)
if laji in v:
print('找到了垃圾:', laji, k)
reng_laji(k, laji, ljt)
# reng_laji(k, laji, ljt_shi)
# 用函数封装写文件的代码
def save_to_file(filename, data):
with open(filename, 'w') as f:
json.dump(data, f)
def main():
# 定义垃圾桶
ljt_shi = {
'name': "湿垃圾",
'data': []
}
ljt_gan = {
'name': "干垃圾",
'data': []
}
# 加载已有的垃圾
ljt_gan = load_data('gan.json')
ljt_shi = load_data('shi.json')
print('加载文件:', ljt_gan, ljt_shi)
# 扔垃圾
laji = input("输入要扔的垃圾:")
print("垃圾:", laji)
# 分类
fenlei(laji, rule, ljt_gan)
fenlei(laji, rule, ljt_shi)
print('-'*20)
print(ljt_shi)
print(ljt_gan)
# 调用函数,保存到具体的垃圾桶文件
save_to_file('gan.json', ljt_gan)
save_to_file('shi.json', ljt_shi)
if __name__ == "__main__":
main()
这段代码不长,但是包含了变量,注释,函数等部分,可以用来做第一个分析目标了。
以下内容用代码和注释来解释做了什么。
# Python算个球
# author:DE8UG
# 首先准备好目标文件
filename = 'rengleme_07.py'
# 写函数得到里面所有行
def get_lines(filename):
with open(filename) as f:
return f.readlines()
# 执行这个函数打印的话,会是下面这一大堆字符串,但,注意看,是个列表。那就好办了
"""
['# author: DE8UG/n', '# 创建垃圾桶和垃圾/n',
'# 规则:k:v,一个k对应一个v,代码表示用冒号分割/n',
'# 输入/n', '# 判断/n', '# 保存/n', '# 函数/n', '# 综合/n', '/n', '/n',
'import json/n', '/n', '/n',
'rule = {/n', ' "湿垃圾": ["菜叶", "橙皮", "葱", "饼干"],
/n', '
"干垃圾": ["旧浴缸", "盆子", "海绵", "卫生纸"]/n', '}/n',
'/n', '/n',
"# print('加载文件:', ljt_gan)/n",
'def load_data(filename):/n',
' with open(filename) as f:/n',
' data = json.load(f)/n',
' return data/n', '/n', '/n', 'def reng_laji(rule_k, laji, ljt):/n', " if rule_k == ljt['name']:/n", " ljt['data'].append(laji)/n", '/n', '/n', 'def fenlei(laji, rule, ljt):/n', ' for k, v in rule.items():/n', ' print(k, v)/n', ' if laji in v:/n', " print('找到了垃圾:', laji, k)/n", ' reng_laji(k, laji, ljt)/n', ' # reng_laji(k, laji, ljt_shi)/n', ' /n', '/n', '# 用函数封装写文件的代码/n', 'def save_to_file(filename, data):/n', " with open(filename, 'w') as f:/n", ' json.dump(data, f)/n', '/n', '/n', 'def main():/n', '/n', ' # 定义垃圾桶/n', ' ljt_shi = {/n', ' /'name/': "湿垃圾",/n', " 'data': []/n", ' }/n', '/n', ' ljt_gan = {/n', ' /'name/': "干垃圾",/n', " 'data': []/n", ' }/n', '/n', ' # 加载已有的垃圾/n', " ljt_gan = load_data('gan.json')/n", " ljt_shi = load_data('shi.json')/n", '/n', " print('加载文件:', ljt_gan, ljt_shi)/n", '/n', ' # 扔垃圾/n', ' laji = input("输入要扔的垃圾:")/n', ' print("垃圾:", laji)/n', '/n', ' # 分类/n', ' fenlei(laji, rule, ljt_gan)/n', ' fenlei(laji, rule, ljt_shi)/n', '/n', " print('-'*20)/n", ' print(ljt_shi)/n', ' print(ljt_gan)/n', '/n', ' # 调用函数,保存到具体的垃圾桶文件/n', " save_to_file('gan.json', ljt_gan)/n", " save_to_file('shi.json', ljt_shi)/n", '/n', '/n', 'if __name__ == "__main__":/n', ' main()/n', '/n', '/n', '/n']
"""
# 我们定义一下结果格式,把每一行代码格式化一下为字典,包含行号,字符串,类型,含义四部分,然后组合为新的列表
[
{
'line':1,
'str':'def load_data(filename):/n',
'type':'function', # code, comment, import, var
'mean':'函数load_data,包含参数:filename'
}
]
def analysis_code(lines):
"""分析每一行代码,根据不同特点,划分不同类型,注意换行的变量和函数会有内部代码,我们通过上一次保存的结果进行分解判断。把格式化后的行保存为新列表,并返回。
"""
results = []
count = 1
for line in lines:
format_line = {
'line': count,
'str': line,
'type':'code', # code, comment, import, var
'inner_code': [],
'mean':''
}
if line.startswith('#'):
format_line['type'] = 'comment'
elif line.startswith('import'):
format_line['type'] = 'import'
elif line.find('=') > 0:
format_line['type'] = 'var'
elif line.startswith('def'):
format_line['type'] = 'function'
# 空行,函数内部代码,变量内部代码,不加入结果
if line.startswith(' ') or line.startswith('}/n'):
# print(results[-1])
if results[-1]['type'] == 'function' or results[-1]['type'] == 'var':
results[-1]['inner_code'].append(line)
elif line.startswith('/n'):
pass # 空行直接掠过
else:
results.append(format_line)
# 循环下一行
count += 1
return results
# 下面开始测试
if __name__ == "__main__":
print('*'*50)
print('欢迎使用Python算个球,掐指一算,你的代码内容如下:')
lines = get_lines(filename)
# print(lines[:10])
r = analysis_code(lines)
# print(r)
comment_list = []
function_list = []
for line in r:
# print(line)
if line['type']=='comment':
comment_list.append(line)
elif line['type']=='function':
function_list.append(line)
print(f'- 共{len(comment_list)}个注释')
print(f'- 共{len(function_list)}个函数:')
for f in function_list:
print(f'line:{f["line"]}', f['str'].strip())
如代码所示,我们今天把目标代码进行了分解,根据每一行不同特点从新进行了格式化,转换为包含行号,字符串,类型,含义四部分的字典。这里还可以根据需要扩展不同的格式,方便我们进一步处理。比如解析代码含义,描述运行流程等。
感谢各位的阅读,以上就是“Python怎么计算球的个数”的内容了,经过本文的学习后,相信大家对Python怎么计算球的个数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/219857.html