第五章 函數(shù)和代碼的復(fù)用
5.1 改造練習(xí)題3.5,輸出更大的田字格
def tian(n):
a = 7 * n + 1
for i in range(1, a + 1):
if i % 7 == 1:
print("+ — — — — — —" * n, end="")
print("+")
else:
print("| " * n, end="")
print("|")
tian(4)
5.2 實現(xiàn)isOdd函數(shù)
def isOdd(n):
if n % 2 != 0:
return True
else:
return False
n = int(input("請輸入一個整數(shù):"))
if isOdd(n):
print("{}是奇數(shù),True".format(n))
else:
print("{}是偶數(shù),F(xiàn)alse".format(n))
5.3 實現(xiàn)isNum函數(shù)
def isNum(s):
try:
complex(s)
return True
except ValueError:
return False
s = input("請輸入一個字符串:")
if isNum(s):
print("True")
else:
print("False")
5.4 實現(xiàn)multi函數(shù)
import ast
def multi(*args):
result = 1
other = ''
for num in args:
if isinstance(num, (int, float, complex)):
result *= num
else:
other += str(num)
return str(result) + other
input_str = input("請輸入一個包含數(shù)字和復(fù)數(shù)的列表,元素之間使用逗號分隔:")
nums = []
for num_str in input_str.split(","):
num_str = num_str.strip() # 去除空格和其他無關(guān)字符
try:
num = ast.literal_eval(num_str) # 使用 ast.literal_eval() 轉(zhuǎn)化為數(shù)字或復(fù)數(shù)
nums.append(num)
except ValueError:
nums.append(num_str)
except SyntaxError:
print(f"無法將字符串 {num_str} 轉(zhuǎn)化")
print(multi(*nums))
5.5 實現(xiàn)isPrime函數(shù)
def isPrime(num):
if not isinstance(num, int):
raise TypeError("參數(shù)必須為整數(shù)")
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
num = input("請輸入一個整數(shù):")
try:
num = int(num)
if isPrime(num):
print(num, "是質(zhì)數(shù)")
else:
print(num, "不是質(zhì)數(shù)")
except ValueError:
print("輸入的不是整數(shù)!")
except TypeError as e:
print(e)
5.6 輸出10種生日日期格式
代碼一:
import datetime
# 創(chuàng)建生日日期對象
birthday = datetime.date(2000, 11, 22)
# 輸出不同格式的日期字符串
print(birthday.strftime("%Y-%m-%d")) # 2000-11-22
print(birthday.strftime("%y-%m-%d")) # 00-11-22
print(birthday.strftime("%m/%d/%Y")) # 11/22/2000
print(birthday.strftime("%B %d, %Y")) # November 22, 2000
print(birthday.strftime("%b %d, %Y")) # Nov 22, 2000
print(birthday.strftime("%A, %B %d, %Y")) # Wednesday, November 22, 2000
print(birthday.strftime("%a, %b %d, %Y")) # Wed, Nov 22, 2000
print(birthday.strftime("%Y%m%d")) # 20001122
print(birthday.strftime("%m%d%Y")) # 11222000
print(birthday.strftime("%Y/%m/%d")) # 2000/11/22
代碼二:文章來源:http://www.zghlxwxcb.cn/news/detail-428282.html
import datetime
# 獲取生日
birthday_str = input("請輸入您的生日(格式為YYYY-MM-DD):")
# 轉(zhuǎn)化為 datetime 對象
birthday = datetime.datetime.strptime(birthday_str, "%Y-%m-%d")
# 生成 10 種不同的日期格式
print("10種不同的日期格式:")
print(birthday.strftime("%Y-%m-%d"))
print(birthday.strftime("%m/%d/%Y"))
print(birthday.strftime("%B %d, %Y"))
print(birthday.strftime("%b %d, %Y"))
print(birthday.strftime("%A, %B %d, %Y"))
print(birthday.strftime("%a, %b %d, %Y"))
print(birthday.strftime("%Y%m%d"))
print(birthday.strftime("%Y年%m月%d日"))
print(birthday.strftime("%Y.%m.%d"))
print(birthday.strftime("%Y-%m-%d"))
5.7 漢諾塔
def move(n, source, target, auxiliary, steps):
"""
遞歸函數(shù),實現(xiàn)漢諾塔移動的核心算法
:param n: 盤子的數(shù)量
:param source: 起始柱子的名稱
:param target: 目標柱子的名稱
:param auxiliary: 輔助柱子的名稱
:param steps: 存儲移動步驟的列表,每個元素為一個元組 (起始柱子, 目標柱子, 盤子編號)
"""
if n == 1:
steps.append((source, target, n)) # 將盤子的編號也添加到步驟中
return
move(n-1, source, auxiliary, target, steps) # 將 n-1 個盤子從起始柱子經(jīng)過目標柱子移到輔助柱子上
steps.append((source, target, n)) # 將第 n 個盤子從起始柱子移到目標柱子上
move(n-1, auxiliary, target, source, steps) # 將 n-1 個盤子從輔助柱子經(jīng)過起始柱子移到目標柱子上
n = int(input("請輸入漢諾塔的層數(shù):"))
source = "A" # 起始柱子的名稱
target = "C" # 目標柱子的名稱
auxiliary = "B" # 輔助柱子的名稱
steps = [] # 存儲移動步驟的列表
move(n, source, target, auxiliary, steps) # 調(diào)用遞歸函數(shù)
print(f"移動步驟共 {len(steps)} 步:")
for i, step in enumerate(steps):
s, t, n = step
print(f"Step {i+1}: 將 {s} 柱上的 {n} 號盤子移動到 {t} 柱上")
注:上述代碼僅供參考,若有問題可在評論區(qū)留言!文章來源地址http://www.zghlxwxcb.cn/news/detail-428282.html
到了這里,關(guān)于《python語言程序設(shè)計基礎(chǔ)》(第二版)第五章課后習(xí)題參考答案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!