這篇文章主要講解了“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怎么計算球的個數這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。