Python3 例題(個人解答)

概要:本文主要是對菜鳥教程裏100例題部分例題的解答,可能思想存在問題,請多指教

  • 題目一:有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
li = [1, 2, 3, 4]
re = []
count = 0
for i in li:
    for j in li:
        for k in li:
            if k != j and k != i and j != i:
                count = count + 1
                re.append(100 * i + 10 * j + k)
print("一共有%d個滿足條件的三位數: " % (count,), end="")
print(re)

執行結果:

一共有24個滿足條件的三位數: [123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
  • 題目二:輸入某年某月某日,判斷這一天是這一年的第幾天?
import datetime

year = int(input('year:'))
month = int(input('month:'))
day = int(input('day:'))
t = datetime.datetime(year=year, month=month, day=day)
print("%d年%d月%d日是%d年的第%d天" % (year, month, day, year, t.timetuple()[7]))

執行結果:

year:2020
month:02
day:23
2020年2月23日是2020年的第54天
  • 題目三:將一個正整數分解質因數。例如:輸入90,打印出90=233*5。
li = []

def get_factor(n):
    flag = 0
    for i in range(2, int(n / 2) + 1):
        if n % i == 0:
            flag = 1
            li.append(str(i))
            get_factor(int(n / i))
            break
    if flag == 0:
        li.append(str(n))
        if len(li) == 1:
            li.insert(0, '1')

num = int(input("請輸入一個正整數:"))
get_factor(num)
print("%s = %s" % (num, ' * '.join(li)))

執行結果:

請輸入一個正整數:68
68 = 2 * 2 * 17
  • 題目四:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
def cal_high(high, times):
    if times == 1:
        return high
    else:
        len = high
        h = high
        for i in range(0, times-1):
            h = h / 2
            len = len + h * 2
    return len

print(cal_high(100, 10)) 

執行結果:

299.609375
  • 題目五:兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
res = []
new = []
for i in ['a', 'b', 'c']:
    for n in ['x', 'y', 'z']:
        if ('a' == i and 'x' == n) or ('c' == i and 'x' == n) or ('c' == i and 'z' == n):
            continue
        else:
            res.append(i + n)
for u in res:
    new.clear()
    new.append(u)
    for v in res:
        st = "".join(new)
        if v[0] in st or v[1] in st:
            continue
        else:
            new.append(v)
    if len(new) == 3:
        break
print("比賽名單爲:" + ','.join(new))

執行結果:

比賽名單爲:az,bx,cy

題目五的解題方法可能過於複雜,希望有更好的解題方案可以分享一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章