if for while循環練習
- 沒有邊界的最好用while,有邊界的最好用for
1.給定一個不超過5位數的正整數,判斷其有幾位
num = int(input())
if num<10:
print('一位')
elif num<100:
print('兩位')
elif num<1000:
print('三位')
elif num<10000:
print('四位')
else:
print('五位')
num = int(input())
if num>1000:
if num>9999:
print('5')
else:
print('4')
else:
if num>100:
print('3')
elif num>10:
print('2')
else:
print('1')
num=int(input())
val=num/100
if val>=1:
if val>=100:
print('5')
elif val>=10:
print('4')
else:
print('3')
else:
if val>=0.1:
print('2')
else:
print('1')
2.給定一個不超過五位的正整數,判斷其有幾位,并分別打印出個位、十位、百位、千位、萬位
num=int(input())
val=num/100
if val>=1:
if val>=100:
n=5
print('5')
elif val>=10:
n=4
print('4')
else:
n=3
print('3')
else:
if val>=0.1:
n=2
print('2')
else:
n=1
print('1')
兩種:
pre=0
for i in range(n,0,-1):
cur=num//(10*(i-1))
print(cur-pre*10)
pre=cur
或
for i in range(1,n+1):
print(num%10)
num=num//10
num = int(input())
count=0
while True:
q=num%10 #取模,把個位數弄出來
print(q)
num=num//10
count += 1
if num == 0:
break
print('你輸入的位數是',count)
2.打印出一個邊長為n的正方形
錯誤示例:
n=int(input())
if i=1|i=n:
print('X'*n)
else:
for i in range(2,n):
print('x'+' '*(n-2)+'x')
該方法不對,首先錯在`if i=1|i=n:`,應該寫成
`if i=1:
elif i=n`
其次錯在if else循環語句上,if不符合就直接執行else,所以答案又可能會缺少第一行和最后一行的打印結果。
應該在if else上加一個for循環,保證if可以執行
正確答案:
n=int(input())
for i in range(1,n+1):
if i==1:
print('X'*n)
elif i==n:
print('X'*n)
else:
print('x'+' '*(n-2)+'x')
3.求100以內所有奇數的和(2500)
m=0
for i in range(1,100,2):
m += i
print(m)
m=0
for i in range(1,100,1):
if i%2 !=0:
m += i
print(m)
4.判斷學生成績,根據ABCDE來分層次
score=int(input())
if score >=80:
if score >=90:
print('A')
else:
print('B')
else:
if score >=70:
print('C')
elif score >=60:
print('D')
else:
print('E')
5.一到五階乘之和
錯誤示例:
m=0
n=1
for i in range(1,6):
for q in range(i,0):
n *= q
m += n
print(m)
這個錯在,n=1放在開頭了,因為放在開頭,n=1會在`for q in range(i,0):`循環當中賦值,而進入下一次循環,這樣就會導致數會越來越大。
找個例子看看:
m=0
n=1
for i in range(1,4):
for q in range(i,0,-1):
n *= q
print(n)
到3的時候才能看清楚,假如i已經進入2的循環,在2循環結束的時候,n的值變成了2,這樣就帶入了3的循環,這樣3的循環結束時,n就變成了12。
所以這樣是錯誤的。
正確答案:
m=0
for i in range(1,6):
n=1
for q in range(i,0):
n *= q
m += n
print(m)
6.給一個數,判斷它是否為質數
num=int(input())
for i in range(2,n):
if num%i=0:
print('composite number')
break
else:
print('prime number')
作業
1.打印九九乘法表
for p in range(1,10):
for q in range(1,10):
if p >= q:
print(q,'*',p,'=',p*q,'\t',end=' ')
print()
#'\t'制表符,專門使排列整齊
for p in range(1,10):
for q in range(1,p+1):
print('%d*%d=%2d' %(q,p,p*q),end=' ')
print()
#%2d的2是表示寬度
for i in range(1,10):
line=''
for j in range(1,i+1):
line += '{0}*{1}={2:<2}'.format(j,i,i*j)
print(line)
# line=''每次循環結束后清空
# {0}*{1}={2:<2},這三個中括號分別對應后面的j,i,i*j。括號里面的0、1、2是編號,所以也可以寫成
# '{}*{}={:<2}'.format(j,i,i*j)
# :<2 冒號是分隔符號,<表示左對齊,2表示寬度
九九乘法表變形
for p in range(1,10):
for q in range(1,10):
if p>q:
print(' '*6,end='\t')
else:
print('{}*{}={}'.format(p,q,p*q),end='\t')
print()
2.打印菱形
- 實心菱形
n=int(input()) for i in range(1,n,2): a=(n-i)//2 print(' '*a+'*'*i) for j in range(n,0,-2): b=(n-j)//2 print(' '*b+'*'*j)
#最簡的方法,要想到range可以取負,讓菱形對稱
for i in range(-3,4):
if i<0:
space=-i
else:
space=i
print(' '*space,'*'*(7-2*space))
- 空心菱形
for i in range(-3,4): if i<0: space=-i else: space=i num=7-2*space if num==1: print(' '*space+'*'*num) else: print(' '*space+'*'+' '*(num-2)+'*') # 注意:print里面的分隔符不能用‘,’因為會對不齊,只能用‘+’,這樣才能對齊。‘,’逗號表示空格,‘+’表示連接符
拓展
- 閃電
for i in range(-3,4): if i<0: print(' '*(-i)+'*'*(4+i)) elif i>0: print(' '*3+'*'*(4-i)) else: print('*'*7)
num=int(input())n=num//2for i in range(-n,n+1): if i<0: print(' '*(-i)+'*'*(n+1+i)) elif i>0: print(' '*n+'*'*(n+1-i)) else: print('*'*num)
3.打印一百以內的斐波那契數列
- 斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89。
- 如果設F(n)為該數列的第n項(n∈N*),那么這句話可以寫成如下形式:F(n)=F(n-1)+F(n-2)
m=0n=1while True: print(n) q=m+n m=n n=q if n>100: break#構思方法:#遇到類似的題,先把第二項賦值給第一項,第三項賦值給第二項,這樣他們就變成了下一輪的第一項和第二項。例如:a=1,b=2,c=a+ba=bb=c
m=0n=1while n<100: print(n) m,n = n,m+n# m,n = n,m+n其實就是等號兩邊相互對應,n賦值給m,m+n賦值給n
4.求斐波那契數列的第101項
seq=int(input())m=0n=1count=0while True: q=m+n m=n n=q count +=1 if count==seq: print(m) break#seq=101
5.求十萬以內的所有素(質)數(查看效率)
- 最慢的
%%timeit #計時n=int(input())for i in range(2,n): for q in range(2,i): if i%q==0: break else: print(i)
- 修改版
n=int(input())print(2)count=1for i in range(3,n,2): for j in range(2,int(i**0.5)+1): if i%j==0: break else: print(i) count +=1print(count)# 質數都在奇數里產生# i**0.5,是對i開根號,這樣就省了后面的重復項,比如24,有2*12,3*8,4*6,6*4,8*3,12*2,對24開根號的話正好取到中間,為了防止遺漏,加1保險。這樣就省去了后面的重復乘積項(6*4,8*3,12*2)
n=int(input())print(2)count=1for i in range(3,n,2): for j in range(3,int(i**0.5)+1,2): if i%j==0: break else: print(i) count +=1print(count)# 第二項for項循環也取了奇數列,這樣效率就更快了。因為偶數都是有2這個因數,所以除以偶數都是無用的。
練習
1.輸入兩個數,比較大小,從小到大升序打印
m=int(input())n=int(input())if m>n: print(n,m)else: print(m,n)
三目運算符
- python沒有三目運算符,但提供了
- 真值if條件else假值
m=int(input())n=int(input())print(n,m)if m>n else print(m,n)
2.輸入n個數,求每次輸入后的算術平均數
count=0sum=0while True: n =input() if n='q': break sum += int(n) count += 1 avg=sum/countprint(avg)
3.猴子吃桃問題
猴子第一天摘下若干個桃,當即就吃了一半,還不過癮,又吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天都是吃掉一半,又吃一個。到第十天早上想吃時,只剩下一個桃子。求第一天摘了多少個?
peach=1
for _ in range(1,10):
peach = 2*(peach+1)
print(peach)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87229