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

题目五的解题方法可能过于复杂,希望有更好的解题方案可以分享一下

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