判斷和循環
(1) 第一次實現:
a = 1
b = 1
sum = a + b
print(a)
print(b)
print(sum)
for j in range(i):
b = sum - b
sum = sum + b
for i in range(1,101):
if i == sum:
print(i)
(2)第二次實現:
a = 1 b = 1 print(a) print(b) for i in range(1,101): if i == a + b: print(i) a = b b = i
(3)第三次實現:
a = 0
b = 1
c = 1
while c:
c = a + b
if c > 100:
break
print(c)
a = b
b = c
(4)第四次實現:
a = 0
b = 1
while b < 100:
print(b)
a,b=b,a+b # a = b , b = a + b
2、求斐波那契數列第101項
(1)第一次實現:
a = 1 b = 1 sum = a + b count = 0 for j in range(102): b = sum - b sum = sum + b count += 1 if count == 98: print(sum)
(2)第二次實現:
a = 1
b = 1
count = 2
while True:
sum = a + b
a = b
b = sum
count += 1
if count == 101:
break
print(sum)
(3)第三次實現:
a = 0
b = 1
count = 0
while True:
a,b=b,a+b
count += 1
if count == 100:
print(b)
break
(4)第四次實現:
a = 0 b = 1 count = 0 while True: c = a + b count += 1 a = b b = c if count == 100: print(c) break
(5)第五次實現:
a = 1
b = 1
for count in range(99):
a,b=b,a+b
else:
print(b)
3、打印一個邊長為n的正方形
(1)第一次實現:
a = int(input("請輸入邊長長度:"))
print(a*"*")
for i in range(a-2):
print("*"+(a-2)*" "+"*")
print(a*"*")
(2)優化實現:
n =int(input(">>>"))
for i in range(n):
if i == 0 or i == n-1:
print(n*"*")
else:
print("*"+" "*(n-2)+"*")
4、求1到5階乘之和
(1)第一次實現:重復進行階乘的累加,效率不高
n = int(input(">>>"))
sum = 0
for i in range(1,n+1):
tmp = 1
for j in range(1,i+1):
tmp *= j
sum += tmp
print(sum)
(2)第二次實現:
n = int(input("please input number:"))
c = 1
sum = 0
for i in range(1,n+1):
c = i * c
sum += c
print(sum)
5、給一個數,判斷它是否是素數(質數)一個大於1的自然數只能被1和它本身整除
避開3,5,10,2的倍數,能被這些數整除的都不是質數
從2到n的開平方,以外的數都不用去計算
(1)第一次實現:
num = int(input(">>>"))
for i in range(2,num):
if num%i == 0:
print("這不是一個素數")
break
else:
print("這是一個素數")
(2)第二次實現:
num = int(input(">>>"))
for i in range(2,int((num**0.5)+1)):
if num % i == 0:
print("This is not a prime number")
break
else:
print("This is a prime number")
6、打印菱形
-
-
(1)第一次實現:
a = 3 b = 1 for i in range(4): if b == 1: print(a*" "+b*"*"+a*" ") elif b == 3: print(a*" "+b*"*"+a*" ") elif b == 5: print(a*" "+b*"*"+a*" ") elif b == 7: print(a*" "+b*"*"+a*" ") a = a - 1 b = b + 2 for j in range(4): a += 1 b -= 2 if b == 5: print(a*" "+b*"*"+a*" ") elif b == 3: print(a*" "+b*"*"+a*" ") elif b == 1: print(a*" "+b*"*"+a*" ")
(2)第二次實現:
n = 7 for i in range(1,n+1,2): a = int((n - i)/2) print(a*" "+i*"*"+a*" ") for i in range(5,0,-2): a = int((n - i)/2) print(a*" "+i*"*"+a*" ")
(3)第三次實現:對稱性
n = int(input(">>>")) for i in range(-n//2,n//2+1): if i <= 0: print(-(i)*" "+"*"*(n+i*2) ) else: print(i*" "+"*"*(n-i*2))
可以寫成三元運算符:
n = int(input(">>>")) for i in range(-n//2,n//2+1): print(-(i)*" "+"*"*(n+i*2)) if i <= 0 else print(i*" "+"*"*(n-i*2))
(4)第四次實現:abs()取絕對值
n = int(input(">>>")) for i in range(-n//2,n//2+1): print(abs(i)*" "+"*"*(n-2*abs(i)))
(5)第五次實現:
n =int(input(">>>")) a = n//2+1 for i in range(n): i += 1 if i<a: x = a - i else: x = i - a y = n - x*2 print(" "*x+"*"*y)
(6)第六次實現:考慮偶數打印的問題
num = int(input(">>>")) if not num%2: num += 1 b = num // 2 for i in range(-b,b+1): print(" "*abs(i)+"*"*(num-2*abs(i)))
(7)第七種實現:考慮偶數的問題
while True: num = int(input("Please enter an odd number,Otherwise re-enter!")) if num % 2 !=0: break for i in range(-num//2,num//2+1): print(" "*abs(i)+"*"*(num-2*abs(i)))
7、打印九九乘法表
(1)第一次實現:
for i in range(1,10): for j in range(1,i+1): print(j,"x",i,"=",i*j,"\t",end="") print()
(2)第二次實現:
for i in range(1,10): for j in range(1,i+1): print("{}*{}={}\t".format(j,i,i*j),end="") print()
(3)第三次實現:
b = 1 while b: for i in range(1,b+1): print("{}*{}={}\t".format(i,b,i*b),end="") print() b += 1 if b == 10: break
(4)第四次實現:將每一行的空格數合成一樣的
for i in range(1,10): for j in range(1,i+1): if j>1 and j*i < 10: print("{}*{}={}".format(j,i,i*j),end=" ") else: print("{}*{}={}".format(j,i,i*j),end=" ") print()
8、求10萬內的所有素數
(1)第一次實現:效率及其之差
import datetime start = datetime.datetime.now() count = 0 for i in range(2,100001): for j in range(2,i): if i!=j: if i%j == 0: break else: #print(i,"\t",end="") count += 1 end = (datetime.datetime.now()-start).total_seconds() print(end) print(count)
時間:139.644859
(2)第二次實現:import datetime start = datetime.datetime.now() count = 0 for i in range(2,100001): for j in range(2,int((i**0.5)+1)): if i%j == 0: break else: #print(i,"\t",end="") count += 1 end = (datetime.datetime.now()-start).total_seconds() print(end) print(count)
時間:0.552862``
(3)第三次實現:import datetime start = datetime.datetime.now() count = 1 #print(2,"\t",end="") for i in range(3,100001,2): for j in range(2,int((i**0.5)+1)): if i%j == 0: break else: #print(i,"\t",end="") count += 1 end = (datetime.datetime.now()-start).total_seconds() print(end) print(count)
時間:0.490323
(4)第四次實現:import datetime start = datetime.datetime.now() count = 1 #print(2,end="\t") for i in range(3,100001,2): if i > 10 and i % 10 == 5:# 在所有大於10的質數中,個位數只有1,3,7,9 continue for j in range(3,int(i**0.5+1),2): if i % j == 0: break else: count += 1 #print(i,end="\t") end = (datetime.datetime.now() - start).total_seconds() print(end) print(count)
時間:0.285051
(5)第五次實現:考慮到與6相鄰的性質import datetime start = datetime.datetime.now() num = 100000 count = 2 # 2和3這兩個質數先算進去 for i in range(5,num,2): if i%6 != 1 and i%6 != 5: continue for j in range(5,int(i**0.5)+1,2): if i % j == 0: break else: count += 1 #print(i) end = (datetime.datetime.now()-start).total_seconds() print(end) print(count)
時間:0.283728
9、 輸入n個數,求每次輸入後的算術平均數
(1)第一次實現:
i = 0 sum = 0 while True: num = int(input("please input a number:")) sum += num i += 1 a = input("continue?(Y/N)") if a == "N": average = sum / i print(average) break
(2)第二次實現:
count = 0 sum = 0 while True: num = int(input(">>>")) if not num: break sum += num count += 1 print(sum/count)
(3)第三次實現:
sum = 0 count = 0 while True: num = input("please input a number,quit enter!") if num == "": break else: sum += int(num) count += 1 print(sum/count)
10、打印閃電
(1) 第一次實現:
b = 3 for i in range(1,4): print(b*" "+i*"*") b -= 1 print(7*"*") for i in range(3,0,-1): print(3*" "+i*"*")
(2)第二次實現:
n = int(input(">>>")) a = n // 2 for i in range(-a,a+1): if i < 0: print(-i*" "+"*"*(n-a+i)) elif i == 0: print(n*"*") else: print(a*" "+"*"*(n-a-i))
(3)第三次實現:
n = int(input(">>>")) a = n // 2 for i in range(-a,a+1): if i < 0: print(" "*abs(i)+"*"*((a+1)+i)) elif i > 0: print(" "*a+"*"*((a+1)-i)) else: print(n*"*")
(4)第四次實現:
num = int(input(">>>")) n = num // 2 for i in range(n,-(n+1),-1): if i > 0: a = i else: a = n if i == 0: print(num*"*") else: print(" "*a+"*"*((n+1)-abs(i)))
11、猴子吃桃問題
猴子吃桃問題.猴子第一天摘下若幹個桃子,當即吃了一半,還不過癮,又多吃了一個.第二天早上又將剩下的桃子吃掉一半,又多吃了一個.以後每天早上都吃了前一天剩下的一半零一個.到第十天早上在想吃時,就只剩一個桃子了.求第一天共摘了多少個桃子?
n = 1 for i in range(1,10): n = 2*(n+1) print(n)
12、給一不超過5位的數,判斷其有幾位
(1) 第一次實現:
a=int(input(">>>")) if a<0: print("輸入格式不正確,請輸入一個不超過5位的數") elif a<100000: if a<10: num elif a<100: print("是一個2位數") elif a<1000: print("是一個3位數") elif a<10000: print("是一個4位數") else: print("是一個5位數") else: print("請輸入一個不超過5位的數")
(2)優化實現1:
num = int(input(">>>")) count = 0 while True: num = num // 10 count += 1 if num == 0: break print(count)
(3)優化實現2:折半查找
num = int(input("Please enter a number to judge:")) if num >= 1000: if num >= 10000: print("five digits") else: print("four digits") else: if num >= 100: print("three digits") elif num >= 10: print("two digits") elif num >= 0: print("one digit") else: print("The negative number does not support judgment for a while. Please try again:")
13、將10以內的數倒序打印
(1)第一次實現:
for i in range(10,0,-1): print(i)
14、打印10以內的偶數
(1)第一次實現:
for i in range(10): if i % 2 != 0: continue print(i)
(2)優化實現1:
for i in range(10): if i % 2 == 0: print(i)
(3)優化實現2:
for i in range(2,10,2): print(i)
15、倒序打印10以內的偶數
for i in range(10,0,-2): print(i)
16、給定一個5位數,判斷其有幾位,並從萬位依次打印到個位
(1)第一次實現:
num = 54321 digits = 10000 count = 0 for i in range(5): print(num // digits) num = num % digits digits = digits // 10 count += 1 print(count)
(2)優化實現
num = int(input(">>>")) if num > 100000: print("請輸入一個5位以內的數!") elif num >=1000: if num >=10000: val = 5 else: val = 4 elif num > 0: if num >=100: val = 3 elif num > 10: val = 2 else: val = 1 else: print("請不要輸入負數!") print(val) for i in range(val,0,-1): print(num // 10**(i-1)) num = num % (10**(i-1))
17、給定一個半徑,求圓的周長和面積
(1)第一次實現:
r = int(input(">>")) p = 3.14 s = p * (r ** 2) print(s) c = 2 * p * r print(c)
(2)優化實現:
r = int(input(">>>")) print("s = " + str(3.14 * r * r)) print("c = " + str(2 * 3.14 * r))
18、輸入兩個數,升序打印
(1)第一次實現:
num1 = int(input()) num2 = int(input()) if num1 > num2: print(num1,num2) else: print(num2,num1)
在python中沒有三目運算符,但是提供了三元表達式:
真值 if條件 else 假值
(2)優化實現:num1 = int(input()) num2 = int(input()) print(num1,num2) if num1 > num2 else print(num2,num1)
19、輸入若幹個整數,打印出最大值
(1)第一次實現:
newNum = 0 while True: num = int(input(">>>")) if num > newNum: newNum = num prompt = input("continue?(Y/N)") if prompt == "N": break print(newNum)
(2)第二次實現:
num1 = int(input("please input first number:")) n = int(input("You want to compare it several times.")) for i in range(n): num2 = int(input("please input second number:")) if num2 > num1: num1 = num2 #將第一次比較後大的值給num1,依次輸入,每次num1中存放的都是最大的值 print("max number is {}".format(num1))
(3)第三次實現:
x = int(input(">>>")) z = 0 for i in range(x): y = int(input(">>>")) if not z: #第一次非0進入語句進行執行,將y的值賦值給z,這時z的值就不在是0,第二次進入非真為0,if第一個判斷就不在執行,進行else的判斷,將最大值放到z中。 z = y elif y > z: z = y print(z)
(4)第四次實現:
num1 = int(input("please input first number:")) max = 0 while True: num2 = input("please input second number,exit press enter!") if num2: num2 = int(num2) if max < num2: max = num2 else: break print("max is",max)
20、求100以內所有奇數的和
sum = 0 for i in range(1,101,2): sum += i print("add =",sum)
21、打印右對齊的九九乘法表
(1)第一次實現:
for i in range(1,10): print(" "*7*(i-1),end="") for j in range(i,10): flog = i*j if flog < 10: end = " " else: end = " " print(str(j) + "*" + str(i) + "=" + str(j*i),end = end) print()
(2)第二次實現:
for i in range(1,10): s = "" for j in range(i,10): s += "{}x{}={:<3} ".format(i,j,i*j) print("{:>78}".format(s))
(3)第三次實現:將前三列的空格數和後面的保持一致
for i in range(1,10): s = "" for j in range(i,10): if j <= 3: s += "{}x{}={:<2} ".format(i,j,i*j) else: s += "{}x{}={:<3} ".format(i,j,i*j) # c風格:‘%d*%d=%2d ‘%(i,j,i*j) print("{:>80}".format(s))
(4)第四次實現:也可以將三元表達式放在format函數中
for i in range(1,10): s = "" for j in range(i,10): s += "{}x{}={:<{}} ".format(i,j,i*j,2 if j<=3 else 3) print("{:>80}".format(s))
22、打印對頂三角形
n = int(input(">>>")) n = n // 2 for i in range(-n,n+1): print(" "*(n-abs(i))+"*"*(abs(i)*2+1))
判斷和循環