- 有四個數(shù)字:1、2喳资、3觉吭、4,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)骨饿?各是多少亏栈?
def test_01():
count = 0
num_lst = []
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if (i != j) & (j != k) and (i != k):
count = count + 1
print("第", count, "個不重復(fù)數(shù)", ":", i * 100 + j * 10 + k)
num_lst.append(i * 100 + j * 10 + k)
return num_lst
- 企業(yè)發(fā)放的獎金根據(jù)利潤提成。利潤(profit)低于或等于10萬元時宏赘,獎金可提10%;利潤高于10萬元黎侈,低于20萬元時察署,低于10萬元的部分按10%提成,高于10萬元的部分峻汉,可提成7.5%贴汪;
20萬到40萬之間時,高于20萬元的部分休吠,可提成5%扳埂;40萬到60萬之間時高于40萬元的部分,可提成3%瘤礁;60萬到100萬之間時阳懂,高于60萬元的部分,可提成1.5%,高于100萬元時岩调,
超過100萬元的部分按1%提成巷燥,從鍵盤輸入當月利潤profit,求應(yīng)發(fā)放獎金總數(shù)号枕?
程序分析:請利用數(shù)軸來分界缰揪,定位。注意定義時需把獎金定義成長整型
def test_02(profit):
rate = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
amount = [10, 20, 40, 60, 100]
sum0 = amount[0] * rate[0]
sum1 = sum0 + (amount[1] - amount[0]) * rate[1]
sum2 = sum1 + (amount[2] - amount[1]) * rate[2]
sum3 = sum2 + (amount[3] - amount[2]) * rate[3]
sum4 = sum3 + (amount[4] - amount[3]) * rate[4]
if profit <= 10:
return profit * rate[0]
elif (profit > 10) and (profit <= 20):
return sum0 + (profit - amount[0]) * rate[1]
elif (profit > 20) and (profit <= 40):
return sum1 + (profit - amount[1]) * rate[2]
elif (profit > 40) and (profit <= 60):
return sum2 + (profit - amount[2]) * rate[3]
elif (profit > 60) and (profit <= 100):
return sum3 + (profit - amount[3]) * rate[4]
elif profit > 100:
return sum4 + (profit - amount[4]) * rate[5]
else:
print("輸入金額錯誤葱淳!")
def test_02_1():
i = int(input("凈利潤:"))
arr = [1000000, 600000, 400000, 200000, 100000, 0]
rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
r = 0
for idx in range(0, 6):
if i > arr[idx]:
# print(idx)
r += (i - arr[idx]) * rat[idx]
# print((i - arr[idx]) * rat[idx])
i = arr[idx]
print(r)
return r
- 一個整數(shù)钝腺,它加上100后是一個完全平方數(shù),再加上168又是一個完全平方數(shù)赞厕,請問該數(shù)是多少艳狐?
def test_03():
num_lst = []
for number in range(1, 9999):
number1 = number + 100
number2 = number + 100 + 168
for i in range(int(math.sqrt(number1)), number1):
if i * i == number1:
for j in range(int(math.sqrt(number2)), number2):
if j * j == number2:
# print(number)
num_lst.append(number)
return num_lst
- 輸入某年某月某日,判斷這一天是這一年的第幾天坑傅?
if __name__ == '__main__':
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
date = input("year-day:")
year = int(date.split("-")[0])
month = int(date.split("-")[1])
day = int(date.split("-")[2])
print(year, month, day)
# 判斷是閏年還是平年
if (year % 4 == 0) or (year % 400 == 0) and (year % 100 != 0):
months[1] = 29
print(year, "是閏年")
else:
print(year, "是平年")
print(months)
s1 = 0
if month == 1:
s1 = day
print(date, "是第", s1, "天")
else:
for i in months[:month - 1]:
s1 = s1 + i
s2 = s1 + day
print(date, "是本年度第", s2, "天")
- 輸入三個整數(shù)x,y,z僵驰,請把這三個數(shù)由小到大輸出
def f1(x, y, z):
lst = [x, y, z]
lst.sort()
print(lst)
# 常規(guī)解法
def Verify_max(x, y, z):
lst = []
lst.append(x)
lst.append(y)
lst.append(z)
lst.sort()
for e in lst:
print(e)
# 解法 2
def V_max(a, b, c):
m = max(a, b, c)
l = min(a, b, c)
for i in [a, b, c]:
if i not in [m, l]:
z = i
for e in [l, z, m]:
print(e)
# 最簡潔
def Sort_L(a, b, c):
l = sorted((a, b, c))
for i in l:
print(i)
def f2():
lst = []
for i in range(0, 3):
x = int(input("integer:"))
lst.append(x)
lst.sort()
print(lst)
- 題目:斐波那契數(shù)列。
程序分析:斐波那契數(shù)列(Fibonacci sequence)唁毒,又稱黃金分割數(shù)列蒜茴,指的是這樣一個數(shù)列:0、1浆西、1粉私、2、3近零、5诺核、8、13久信、21窖杀、34、……裙士。
在數(shù)學上入客,費波那契數(shù)列是以遞歸的方法來定義:
F0=0 (n=0)
F1=1 (n=1)
Fn = F(n-1) + F(n-2) (n>=2)
題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子腿椎,小兔子長到第三個月后每個月又生一對兔子桌硫,假如兔子都不死,問每個月的兔子總數(shù)為多少啃炸?
程序分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....
def test_06(n):
a, b = 1, 1
for i in range(n - 1):
a, b = b, a + b
return a
def test_06_1(n):
if n == 1 or n == 2:
return 1
return test_06_1(n - 1) + test_06_1(n - 2)
def test_06_2(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs
7.將一個列表的數(shù)據(jù)復(fù)制到另一個列表中
def f(lst1):
lst2 = lst1[:]
return lst2
- 輸出 9*9 乘法口訣表铆隘。
def func():
for i in range(1, 10):
for j in range(1, 10):
print(" %d*%d=%d " % (i, j, i * j), end="")
if i == j:
print("")
break
def func2():
for i in range(1, 10):
print()
for j in range(1, i + 1):
print("%d*%d=%d" % (i, j, i * j), end=" ")
def func3():
for i in range(1, 10):
for j in range(1, i + 1):
v = i * j
print("%d*%-1d=%-4d" % (i, j, v), end=" "),
if i == j:
print('')
- 暫停一秒輸出。
import time
if __name__ == '__main__':
myD = {1: 'a', 2: 'b'}
for key, value in dict.items(myD):
print(key, value)
time.sleep(1) # 暫停 1 秒
- 暫停一秒輸出南用,并格式化當前時間
import time
if __name__ == '__main__':
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 暫停一秒
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
- 題目:用*號輸出字母C的圖案膀钠。
def Output():
s = ' '
for i in range(8, -1, -2):
print(s * i + '*')
print('*')
for i in range(1, 8, 2):
print(s * i + '*')
- 判斷101-200之間有多少個素數(shù)掏湾,并輸出所有素數(shù)
程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除托修,則表明此數(shù)不是素數(shù)忘巧,反之是素數(shù)。
def func():
num_lst = []
for i in range(101, 200):
for j in range(2, int(math.sqrt(i))):
if i % j == 0:
num_lst.append(i)
break
else:
continue
lst = []
for j in range(101, 200):
if j not in num_lst:
lst.append(j)
return lst
- 題目:打印出所有的"水仙花數(shù)"睦刃,所謂"水仙花數(shù)"是指一個三位數(shù)砚嘴,其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個"水仙花數(shù)"涩拙,因為153=1的三次方+5的三次方+3的三次方际长。
程序分析:利用for循環(huán)控制100-999個數(shù),每個數(shù)分解出個位兴泥,十位工育,百位。
def func():
for n in range(100, 1000):
i = n / 100
j = n / 10 % 10
k = n % 10
if n == i ** 3 + j ** 3 + k ** 3:
print(n)
- 將一個正整數(shù)分解質(zhì)因數(shù)搓彻。例如:輸入90,打印出90=233*5如绸。
def func(n):
num = n
lst = [] # 存放質(zhì)因數(shù)的列表
for i in range(int(n / 2) + 1): # 判斷次數(shù)僅需該數(shù)字的一半多1次
for j in range(2, n):
if n % j == 0: # 若能整除
n = n // j # 除以質(zhì)因數(shù)后的n重新進入判斷,注意應(yīng)用兩個除號旭贬,使n保持整數(shù)
lst.append(j) # 則表示i是質(zhì)因數(shù)
break # 找到1個質(zhì)因數(shù)后馬上break怔接,防止非質(zhì)數(shù)卻可以整除的數(shù)字進入質(zhì)因數(shù)列表
if len(lst) == 0: # 若一個質(zhì)因數(shù)也沒有
print('該數(shù)字沒有任何質(zhì)因數(shù)。')
else: # 若至少有一個質(zhì)因數(shù)
lst.append(n) # 此時n已被某個質(zhì)因數(shù)整除過稀轨,最后一個n也是其中一個質(zhì)因數(shù)
lst.sort() # 排下序
print('%d=%d' % (num, lst[0]), end='') # 打印頭兩個值
for i in range(1, len(lst)):
print('*%d' % lst[i], end='') # 打印后面的值
- 題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示扼脐,60-89分之間的用B表示,60分以下的用C表示奋刽。
def func():
score = int(input('輸入分數(shù):\n'))
if score >= 90:
grade = 'A'
elif score >= 60:
grade = 'B'
else:
grade = 'C'
print('%d 屬于 %s' % (score, grade))
- 題目:輸出指定格式的日期瓦侮。
import datetime
if __name__ == '__main__':
# 輸出今日日期,格式為 dd/mm/yyyy佣谐。更多選項可以查看 strftime() 方法
print(datetime.date.today().strftime('%d/%m/%Y'))
# 創(chuàng)建日期對象
day = datetime.date(1941, 1, 5)
print(day.strftime('%d/%m/%Y'))
# 日期算術(shù)運算
nextDay = day + datetime.timedelta(days=1)
print(nextDay.strftime('%d/%m/%Y'))
# 日期替換
firstDay = day.replace(year=day.year + 1)
print(firstDay.strftime('%d/%m/%Y'))
- 題目:輸入一行字符肚吏,分別統(tǒng)計出其中英文字母、空格狭魂、數(shù)字和其它字符的個數(shù)须喂。
def func():
s = input("請輸入一個字符串:")
letters = 0
spaces = 0
digits = 0
others = 0
i = 0
while i < len(s):
c = s[i]
if c.isalpha():
letters += 1
elif c.isspace():
spaces += 1
elif c.isdigit():
digits += 1
else:
others += 1
i += 1
print("char=%-2d, space=%-2d,digit=%-2d,others=%-2d" % (letters, spaces, digits, others))
# 方法2
def func2():
s = input("請輸入一個字符串:")
letters = 0
spaces = 0
digits = 0
others = 0
for c in s:
if c.isalpha():
letters += 1
elif c.isspace():
spaces += 1
elif c.isdigit():
digits += 1
else:
others += 1
print("char=%-2d, space=%-2d,digit=%-2d,others=%-2d" % (letters, spaces, digits, others))
- 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字趁蕊。例如2+22+222+2222+22222(此時共有5個數(shù)相加),幾個數(shù)相加由鍵盤控制仔役。
def func():
a = input('輸入數(shù)字>>>')
count = int(input('幾個數(shù)字相加>>>'))
ret = []
for i in range(1, count + 1):
ret.append(int(a * i)) # 字符乘以數(shù)字將會是重復(fù)字符掷伙,將字符再轉(zhuǎn)換為整形
print(ret[i - 1])
print(sum(ret))
"""
方法二
"""
def func1():
a = input('輸入數(shù)字>>>')
count = int(input('幾個數(shù)字相加>>>'))
res = 0 # 根據(jù)count獲取值的長度
lst = [] # 每位數(shù)的值置列表,然后計算列表中的和
for i in range(1, count + 1): # 循環(huán)次數(shù)與輸入的值一樣又兵,但從1開始循環(huán)
if i == 1:
res = int(a)
lst.append(res)
else:
res += 10 ** (i - 1) * int(a)
lst.append(res)
print(lst)
res_value = 0
for i in lst:
res_value += int(i)
print(res_value)
- 題目:一個數(shù)如果恰好等于它的因子之和任柜,這個數(shù)就稱為"完數(shù)"卒废。例如6=1+2+3.編程找出1000以內(nèi)的所有完數(shù)。
def test_func():
cst = [] # 完數(shù)列表
for i in range(1, 1000):
print("--:", i)
ast = [] # 所有因子列表
bst = [] # 不重復(fù)因子列表
for j in range(1, i):
if i % j == 0:
ast.append(j)
continue
# print("所有因子:", ast)
for e in ast:
if e not in bst:
bst.append(e)
print("不重復(fù)因子:", bst)
# 判斷是否是完數(shù)
res = 0 # 計算因子之和
for v in bst:
res += int(v)
if res == i: # 判斷是否完數(shù)
cst.append(i)
print("----------------------------------")
print("1000以內(nèi)的完數(shù)列表:", cst)
- 題目:一球從100米高度自由落下宙地,每次落地后反跳回原高度的一半摔认;再落下,求它在第10次落地時宅粥,共經(jīng)過多少米参袱?第10次反彈多高?
def test_func(n):
lst = [] # 反彈高度的列表統(tǒng)計
result = 0.00 # 共經(jīng)過多少米
h = 100
for i in range(1, n + 1):
if i == 1: # 第一次下落100
lst.append(h)
else:
lst.append(h / 2 ** (i - 1) * 2)
print(lst)
for i in lst:
result += i
return result
# 每次反彈的高度,每次落地后反跳回原高度的一半
def rebound(n):
return 100 / (2 ** n)
- 題目:猴子吃桃問題:猴子第一天摘下若干個桃子秽梅,當即吃了一半抹蚀,還不過癮,又多吃
了一個第二天早上又將剩下的桃子吃掉一半企垦,又多吃了一個环壤。
以后每天早上都吃了前一天剩下的一半多一個。
到第10天早上想再吃時钞诡,見只剩下一個桃子了郑现。求第一天共摘了多少
最佳方法(遞歸)
def Calc_peach(N):
if N == 1:
return 1
else:
return (1 + Calc_peach(N-1)) * 2
常規(guī)方法一
def func(day):
S = 1
for i in range(day, 1, -1):
S = (S + 1)*2
print S
常規(guī)方法二
x2 = 1
for day in range(9,0,-1):
x1 = (x2 + 1) * 2
x2 = x1
print x1
- 兩個乒乓球隊進行比賽,各出三人荧降。甲隊為a,b,c三人接箫,乙隊為x,y,z三人。已抽簽決定比賽名單誊抛。有人向隊員打聽比賽的名單列牺。a說他不和x比,c說他不和x,z比拗窃,請編程序找出三隊賽手的名單瞎领。
方法一
for a in ['x','y','z']:
for b in ['x', 'y', 'z']:
for c in ['x', 'y', 'z']:
if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
print('a和%s比賽,b和%s比賽随夸,c和%s比賽' %(a,b,c))
方法二
for i in range(ord('x'),ord('z') + 1):
for j in range(ord('x'),ord('z') + 1):
if i != j:
for k in range(ord('x'),ord('z') + 1):
if (i != k) and (j != k):
if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
print ('order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k)))
方法三
import itertools
A = ["a", "b", "c"]
B = ["x", "y", "z"]
team = [] # 存儲比賽名單
rankB = [list(each) for each in itertools.permutations(B)] # 將對手的全部組合方式列出來
while True:
flag = 0
team = list(zip(A, B)) # 匹配選手
print(team)
for each in team:
if (("a" in each) and ("x" in each)) or (("c" in each) and (("x" in each) or ("z" in each))): # 判斷是否符合對陣要求
flag = 1 # 如不符合則打個標記
break
if flag:
B = rankB.pop() # 改變一下對手位置
else:
break
for v1, v2 in team:
print("%s 對陣 %s" % (v1, v2))
-
打印出如下圖案(菱形):
image.png
for i in range(1, 8, 2):
print(' ' * (4 - (i + 1) //2) + '*' * i)
for i in range(5, 0, -2):
print(' ' * (4 - (i + 1) // 2) + '*' * i)
- 有一分數(shù)序列:2/1九默,3/2,5/3宾毒,8/5驼修,13/8,21/13...求出這個數(shù)列的前20項之和诈铛。
def func(a,b,N):
if N == 1:
return float(a) / b
else:
a = a + b
b = a - b
return float(a) / b + func(a ,b ,N-1)
- 題目:求1+2!+3!+...+20!的和乙各。
n = 0
s = 0
t = 1
for n in range(1,21):
t *= n
s += t
print( '1! + 2! + 3! + ... + 20! = %d' % s)
- 利用遞歸方法求5!
'''
題目:利用遞歸方法求5!
'''
def func(N):
if N == 1:
return 1
else:
return N * func(N-1)
if __name__ == "__main__":
N = int(raw_input("Please enter an num: "))
res = func(N)
print "res is : %r" %res