python基础100_python基础100题
有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
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, "個不重復數", ":", i * 100 + j * 10 + k)
num_lst.append(i * 100 + j * 10 + k)
return num_lst
企業發放的獎金根據利潤提成。利潤(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,求應發放獎金總數?
程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型
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
一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
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, "天")
輸入三個整數x,y,z,請把這三個數由小到大輸出
def f1(x, y, z):
lst = [x, y, z]
lst.sort()
print(lst)
# 常規解法
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)
題目:斐波那契數列。
程序分析:斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……。
在數學上,費波那契數列是以遞歸的方法來定義:
F0=0 (n=0)
F1=1 (n=1)
Fn = F(n-1) + F(n-2) (n>=2)
題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
程序分析:兔子的規律為數列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.將一個列表的數據復制到另一個列表中
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之間有多少個素數,并輸出所有素數
程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。
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
題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
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)
將一個正整數分解質因數。例如:輸入90,打印出90=233*5。
def func(n):
num = n
lst = [] # 存放質因數的列表
for i in range(int(n / 2) + 1): # 判斷次數僅需該數字的一半多1次
for j in range(2, n):
if n % j == 0: # 若能整除
n = n // j # 除以質因數后的n重新進入判斷,注意應用兩個除號,使n保持整數
lst.append(j) # 則表示i是質因數
break # 找到1個質因數后馬上break,防止非質數卻可以整除的數字進入質因數列表
if len(lst) == 0: # 若一個質因數也沒有
print('該數字沒有任何質因數。')
else: # 若至少有一個質因數
lst.append(n) # 此時n已被某個質因數整除過,最后一個n也是其中一個質因數
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('輸入分數:\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'))
# 創建日期對象
day = datetime.date(1941, 1, 5)
print(day.strftime('%d/%m/%Y'))
# 日期算術運算
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'))
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
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是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
def func():
a = input('輸入數字>>>')
count = int(input('幾個數字相加>>>'))
ret = []
for i in range(1, count + 1):
ret.append(int(a * i)) # 字符乘以數字將會是重復字符,將字符再轉換為整形
print(ret[i - 1])
print(sum(ret))
"""
方法二
"""
def func1():
a = input('輸入數字>>>')
count = int(input('幾個數字相加>>>'))
res = 0 # 根據count獲取值的長度
lst = [] # 每位數的值置列表,然后計算列表中的和
for i in range(1, count + 1): # 循環次數與輸入的值一樣,但從1開始循環
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)
題目:一個數如果恰好等于它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程找出1000以內的所有完數。
def test_func():
cst = [] # 完數列表
for i in range(1, 1000):
print("--:", i)
ast = [] # 所有因子列表
bst = [] # 不重復因子列表
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("不重復因子:", bst)
# 判斷是否是完數
res = 0 # 計算因子之和
for v in bst:
res += int(v)
if res == i: # 判斷是否完數
cst.append(i)
print("----------------------------------")
print("1000以內的完數列表:", cst)
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
def test_func(n):
lst = [] # 反彈高度的列表統計
result = 0.00 # 共經過多少米
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
常規方法一
def func(day):
S = 1
for i in range(day, 1, -1):
S = (S + 1)*2
print S
常規方法二
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)
有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前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
總結
以上是生活随笔為你收集整理的python基础100_python基础100题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ amp vs2017 报错_op
- 下一篇: mimo雷达信号处理_雷达学术入门脉冲雷