LaTex_Texmaker 學習之路
這是將原本由 Microsoft Word 完成的作業,改以 LaTex_Texmaker 完成的 PDF 檔 。
目前中文目錄的編號仍在努力中,LaTex_Texmaker 寫法放在圖片之後。
LaTex_Texmaker
\documentclass[a4paper,12pt]{article}
% 使用中文
\usepackage{xeCJK}
%\setCJKmainfont{SimSun} % 新宋体 SimSun、NSimSun
%\setCJKmainfont{標楷體}
\setCJKmainfont{細明體}
%\setCJKmainfont{新細明體}
%\setCJKmainfont{微軟正黑體}
% 日期格式
\usepackage[nodayofweek]{datetime}
\newdateformat{mydate}{\THEYEAR {} \twodigit{\THEMONTH} \twodigit{\THEDAY}}
% 設定邊界、段距及列距
\usepackage[margin=2cm]{geometry}
\usepackage{setspace}
%\doublespacing % 2.0 倍列距
\onehalfspacing % 1.5 倍列距
\setlength{\parskip}{6pt}
% 字體大小擴充功能
\usepackage{moresize}
% 使用圖片
\usepackage{graphicx}
% 清單擴充功能
\usepackage{enumerate}
% 參考文獻 需另建立一個 .bib 檔
\usepackage[notocbib]{apacite} % 目錄中不出現 reference
%%%%%% 文章起始 %%%%%%
\begin{document}
%%% 封面
\begin{titlepage}
\begin{center}
\vspace*{0.5cm}
\huge 數位家庭程式設計入門作業04
\vspace{1cm}
\HUGE \textbf{名稱:黑洞數}
\vspace{1cm}
\includegraphics[width=7cm]{2019_1.jpg}
\vfill
\huge 姓名:鍾士燊
\begin{center}
% \today
% \shortdate
% \today
\mydate
\today {} \currenttime
\end{center}
\end{center}
\end{titlepage}
%%% 摘要
%\section*{摘要} % * 表示目錄中不出現 摘要
\pagenumbering{roman} % 摘要 頁碼
%這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試,這是摘要測試。
%%% 目錄
\renewcommand\contentsname{目錄} % 目錄名稱改成 中文
\tableofcontents
%%% 本文
\newpage
\pagenumbering{arabic} % 頁碼改為 阿拉伯數字
\section*{一、程式說明} % * 表示不加編號,但也不會出現在目錄中
\addcontentsline{toc}{section}{一、程式說明}
% \addcontentsline 自行將標題加入目錄檔,供 LaTex 建立目錄。
\subsection*{(一)何謂黑洞數}
\addcontentsline{toc}{subsection}{(一)何謂黑洞數}
\hspace{2.1em}黑洞數是指於三位數或四位數中,只要數字不完全相同,將該數字由大到小排列減去由小到大排列,經有限操作後,總會得到某一固定的數字,這種現象類似黑洞,故稱為黑洞數\footnote{https://zh.wikipedia.org/zh-tw/黑洞數}。
\subsection*{(二)黑洞數遊戲規則}
\addcontentsline{toc}{subsection}{(二)黑洞數遊戲規則}
\hspace{3.6em}1. 輸入一不完全相同的三位數或四位數 N。
\hspace{2.1em}2. 重新排列 N,取得此數之最大數$ N_{max} $ 與最小數$ N_{min} $。
\hspace{2.1em}3. 令 $ M = N_{max} – N_{min} $。
\hspace{2.1em}4. 當 N == M 時停止程式,否則令 N=M 並重複步驟 2、步驟 3 與步驟 4。
\subsection*{(三)程式附加功能}
\addcontentsline{toc}{subsection}{(三)程式附加功能}
\hspace{3.6em}1. 程式需有防止輸入非數字、全相同、非三位數及非四位數功能。
\hspace{2.1em}2. 遊戲規則步驟3,相減後之數字位數不足時,於MSD補 "0"。
\hspace{2.1em}3. 程式需顯示黑洞數轉換過程。
\subsection*{(四)範例}
\addcontentsline{toc}{subsection}{(四)範例}
\hspace{3.6em}請輸入 3 或 4 位數: 8904
\hspace{2.1em} 1. 9840 - 0489 = 9351
\hspace{2.1em} 2. 9531 - 1359 = 8172
\hspace{2.1em} 3. 8721 - 1278 = 7443
\hspace{2.1em} 4. 7443 - 3447 = 3996
\hspace{2.1em} 5. 9963 - 3699 = 6264
\hspace{2.1em} 6. 6642 - 2466 = 4176
\hspace{2.1em} 7. 7641 - 1467 = 6174
\hspace{2.1em} 8. 7641 - 1467 = 6174
\newpage
\section*{二、程式流程圖}
\addcontentsline{toc}{section}{二、程式流程圖}
% 插入圖表
\begin{figure}[h]
\centering
\includegraphics[width=14cm]{數位家庭程式設計入門練習04.jpg}
% \caption{圖表說明Caption}
% \label{fig:T1}
\end{figure}
\newpage
\section*{三、相關指令說明}
\addcontentsline{toc}{section}{三、相關指令說明}
\subsection*{01.print\footnote{https://www.runoob.com/python3/python-func-print.html}}
\addcontentsline{toc}{subsection}{01.print}
\hspace{3.6em}用於列印輸出,是最常見的一個函數。
\hspace{2.1em}範例:
\hspace{2.1em}01.print ( “ Hello World “ )
\hspace{2.1em}Hello World \\
\hspace{2.1em}02.print("{:.2f}".format(3.1415926))
\hspace{2.1em}3.14
\subsection*{02.while\footnote{https://steam.oxxostudio.tw/category/python/basic/loop.html}}
\addcontentsline{toc}{subsection}{02.while}
\hspace{3.6em}「while 迴圈」是「根據條件判斷,決定是否重複或停止」的迴圈,
\hspace{2.1em}用法為「while 條件:」,如果條件判斷為 True,就會不斷執行迴圈內容,
\hspace{2.1em}如果判斷為False,就會停止迴圈。
\hspace{2.1em}範例:
\hspace{2.1em}a = 1
\hspace{2.1em}while a<=5:
\hspace{3.6em} print(a)
\hspace{3.6em} a += 1
\hspace{2.1em}--- RUN ---
\hspace{2.1em}1 2 3 4 5
\subsection*{03.try: except ValueError:\footnote{待更新}}
\addcontentsline{toc}{subsection}{03.try: except ValueError:}
\hspace{3.6em}當 try 區段內的程式發生錯誤時,就會執行 except 裡的內容,
\hspace{2.1em}如果 try 的程式沒有錯誤,就不會執行 except 的內容,
\hspace{2.1em}範例:
\hspace{2.1em}try: \#使用 try,測試內容是否正確
\hspace{3.6em} a = int(input('輸入數字:'))
\hspace{3.6em} print(a + 1)
\hspace{2.1em}except: \#如果 try 的內容發生錯誤,就執行 except 裡的內容
\hspace{3.6em} print('發生錯誤')
\hspace{2.1em}print('hello')
\hspace{2.1em}--- RUN ---
\hspace{2.1em}輸入數字:test
\hspace{2.1em}發生錯誤
\hspace{2.1em}Hello
\newpage
\section*{四、程式}
\addcontentsline{toc}{section}{四、程式}
% 保持原文字輸出,不轉為 LaTex 語法。
\begin{verbatim}
#
# 數位家庭程式設計入門練習 04
# 名稱:黑洞數
# 姓名:鍾士燊
# 日期:2023 0701
#
## 輸入
from functools import reduce
# 確保玩家輸入為 3 或 4 位數
while True:
try:
N = int(input("\n 請輸入 3 或 4 位數: "))
N = str(N)
if not (len(N) == 4 or len(N) ==3):
raise ValueError
if len(N)==3 and N[0]==N[1]==N[2]:
raise ValueError
if len(N)==4 and N[0]==N[1]==N[2]==N[3]:
raise ValueError
break
except ValueError: # 轉換失敗與輸入不為 3 或 4 位數,重新輸入。
print(' 請重新輸入 3 或 4 位數\n')
continue
## 處理
num_len = len(N) # 紀錄原始數字長度
次數 = 1
M0, M = 1, 0
while M0 != M: # 停止條件:計算至與前次相同
最大數_s = sorted(N,reverse=True) # 由大到小排序,文字屬性。
最小數_s = sorted(N) # 由小到大排序,文字屬性。
最大數_n = int(reduce(lambda x,y:x+y,最大數_s)) # 文字相加並轉為數字
最小數_n = int(reduce(lambda x,y:x+y,最小數_s))
M = 最大數_n - 最小數_n
## 輸出
print(" {0:4} {1:4} - {2:4} = {3:4}".format(次數,最大數_n,最小數_n,M))
# 下一階段處理的起始設定
N = str(M) # 將新數轉為文字
if len(N) < num_len: # 數字長度小於原數字長度,於前面補 0
N = "0" * (num_len - len(N)) + N
M0, M = M, M0
次數 += 1
\end{verbatim}
\newpage
\section*{五、執行結果}
\addcontentsline{toc}{section}{五、執行結果}
\begin{verbatim}
--- RUN ---
請輸入 3 或 4 位數: 12
請重新輸入 3 或 4 位數
請輸入 3 或 4 位數: 12345
請重新輸入 3 或 4 位數
請輸入 3 或 4 位數: 12.99
請重新輸入 3 或 4 位數
請輸入 3 或 4 位數: a.bc
請重新輸入 3 或 4 位數
請輸入 3 或 4 位數: 8904
1 9840 - 0489 = 9351
2 9531 - 1359 = 8172
3 8721 - 1278 = 7443
4 7443 - 3447 = 3996
5 9963 - 3699 = 6264
6 6642 - 2466 = 4176
7 7641 - 1467 = 6174
8 7641 - 1467 = 6174
\end{verbatim}
\newpage
\section*{六、心得與延伸}
\addcontentsline{toc}{section}{六、心得與延伸}
\end{document}
留言
張貼留言