1.一張紙的厚度大約是0.08mm急鳄,對折多少次之后能達(dá)到珠穆朗瑪峰的高度(8848.13米)?
規(guī)律:n=1(折一次):厚度為0.08 * 21 沸停;n=2:厚度為0.0822 ; n=n:厚度為0.082**n
n = 1 # 第一次循環(huán)的初始值設(shè)為1膜毁,代表折第一次
while True:
sum1 = 0.08 * (2**n) # 折n次的高度,比如:折一次的高度為 0.08*2**1
if sum1>=8848130: # 如果總的高度>8848130mm,就終止循環(huán)愤钾,否則瘟滨,繼續(xù)算sum1 = 0.08 * (2**n)
break
n += 1
print(n)
2. 古典問題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子能颁,
小兔子長到第三個(gè)月后每個(gè)月又生一對兔子杂瘸,假如兔子都不死,問每個(gè)月的兔子總數(shù)為多少劲装?
num = 10 # 求第20個(gè)月有幾對兔子
m1 = 1 # 第一個(gè)月有1對兔子
m2 = 1 # 第二個(gè)月有1對兔子
i = 3 # 從第三個(gè)月起胧沫,兔子有幾對
for i in range(3,num+1):
current = m1 + m2
print('第',i,'個(gè)月','有',current,'對兔子')
m1,m2 = m2,current
3. 將一個(gè)正整數(shù)分解質(zhì)因數(shù)昌简。例如:輸入90,打印出90=2x3x3x5。
list1 = [] #創(chuàng)建一個(gè)空列表
num = int(input('請輸入一個(gè)正整數(shù):'))
# 判斷 num 能否被2~它本身-1(i)的數(shù)整除绒怨,如果能i就是它的質(zhì)因數(shù)纯赎,
# 隨著循環(huán)的過程num不斷減小,所以不用擔(dān)心出現(xiàn)重復(fù)錄入的情況
for i in range(2,num):
while True:
if num % i == 0:
list1.append(i)
num = num / i
else:
break
print(list1)
"""
循環(huán)分解:
num = 12
i = (2,3,4,5,6,7,8,9,10,11)
i = 2, 12 % 2 == 0 true list1.append(2) num=12/2=6
i = 2, 6 % 2 == 0 true list1.append(2) num=6/2=3
i = 2, 3 % 2 != 0 false break
i = 3, 12 % 3 == 0 true list1.append(3) num=12/3=4
i = 3, 4 % 3 !=0 false break
i = 4, 4 % 4 ==0 true list1.append(4) num=4/4=1
i = 4, 1 % 4 !=0 false break
i = 5, 1 % 5 !=0 false break
i = 6, 1 % 6 !=0 false break
....
"""
4.輸入兩個(gè)正整數(shù)m和n南蹂,求其最大公約數(shù)和最小公倍數(shù)犬金。 程序分析:利用輾除法。
最大公約數(shù):num1 % num2 =x 六剥;如果x==0,那么num2為最大公約數(shù)晚顷,如果x!=0,那么num1=num2,num2=x,再循環(huán)
最小公倍數(shù):兩個(gè)數(shù)之積除以最大公約數(shù)
# 前提是num1>num2
num1 = int(input('請輸入一個(gè)正整數(shù):'))
num2 = int(input('請輸入另一個(gè)正整數(shù):'))
a = num1
b = num2
if num1>num2:
while True:
x = num1 % num2
if x ==0:
break
num1 , num2 = num2 , x
print('最大公約數(shù)是:', num2)
print('最小公倍數(shù):',(a*b)/num2)
5. 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為 "完數(shù) "疗疟。例如6=1+2+3. 編程 找出1000以內(nèi)的所有完數(shù)
for num in range(1,1000): # 從1-1000中取出一個(gè)數(shù)
sum = 0 # 設(shè)定sun的初始值為0
# 先判斷取出的num值该默,再找出num的因子們(1~num-1的數(shù)是否能夠被num整除),如果能整除sum就加上因子
for i in range(1,num):
if num % i ==0:
sum += i
# 循環(huán)完之后策彤,如果num==sum 就說明是完數(shù)
if sum == num:
print(num,'是完數(shù)')
6.輸入某年某月某日栓袖,判斷這一天是這一年的第幾天? 程序分析:以3月5日為例店诗,應(yīng)該先把前兩個(gè)月的加起來裹刮, 然后再加上5天即本年的第幾天,特殊情況庞瘸,閏年且輸入月份大于3時(shí)需考慮多加一天捧弃。
year = int(input('請輸入年份:'))
month = int(input('請輸入月份:'))
day = int(input('請輸入號數(shù):'))
# 第一步:判斷年份是否是閏年
isleap_year = True # 假定輸入的年份是閏年
if (year % 4 ==0 and year % 100 !=0) or year % 400==0:
isleap_year = True # 滿足條件即為閏年,假設(shè)成立,2月是29天
months_list = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else: # 假設(shè)的條件不成立擦囊,2月是28天
months_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 第二步:計(jì)算天數(shù)
# 如果month ==i 违霞,就加上列表中的月份對應(yīng)的天數(shù)
days_sum = 0
for i in range(1,13):
if i == month:
for x in range(i-1): # 對month_list列表中輸入月份的前幾個(gè)月份天數(shù)相加(循環(huán)列表,循環(huán)一次加一次)
days_sum = days_sum + months_list[x] #從索引0開始循環(huán)
print('這是',year,'年的第',days_sum+day,'天')
7. 某個(gè)公司采用公用電話傳遞數(shù)據(jù)霜第,數(shù)據(jù)是四位的整數(shù)葛家,在傳遞過程中是加密的,加密規(guī)則如下:
每位數(shù)字都加上5,然后用每個(gè)數(shù)字的和除以10的余數(shù)代替該數(shù)字泌类,再將第一位和第四位交換癞谒,第二位和第三位交換。求輸入的四位整數(shù)加密后的值
num = int(input('請輸入一個(gè)四位數(shù):'))
# 第一步:取出num的個(gè)位刃榨、十位弹砚、百位、千位
num_list=[] # 定義一個(gè)空列表
num_list.append(num // 1000) # 將千位上的數(shù)字添加進(jìn)列表
num_list.append(num // 100 % 10) # 將百位上的數(shù)字添加進(jìn)列表
num_list.append(num % 100 // 10) # 將十位上的數(shù)字添加進(jìn)列表
num_list.append(num % 10) # 將個(gè)位上的數(shù)字添加進(jìn)列表
# num_list[個(gè)枢希,十桌吃,百,千]
# 第二步:加密
# i 分別取列表中的值進(jìn)行加5和取余(i 的值代表列表中的索引值)
for i in range(4):
num_list[i] +=5
num_list[i] %=10
# x分別取列表中的值進(jìn)行交換
for x in range(2):
num_list[x],num_list[3-x] = num_list[3-x],num_list[x]
print(num_list)
"""
第二個(gè)for循環(huán)分解詳情:(例如:現(xiàn)在的列表是[6,7,8,9])
x = 0 num_list[0],num_list[3] = num_list[3],num_list[0] # 第一位苞轿,第四位 = 第四位茅诱,第五位
x = 1 num_list[1],num_list[2] = num_list[2],num_list[1] # 第二位逗物,第三位 = 第三位,第二位
"""