Python基礎之if while for循環練習

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()  

Python基礎之if while for循環練習


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里面的分隔符不能用‘,’因為會對不齊,只能用‘+’,這樣才能對齊。‘,’逗號表示空格,‘+’表示連接符
    

    Python基礎之if while for循環練習


拓展

  • 閃電
    for i in range(-3,4):    if i<0:        print(' '*(-i)+'*'*(4+i))    elif i>0:        print(' '*3+'*'*(4-i))    else:        print('*'*7)

Python基礎之if while for循環練習

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

(1)
nolannolan
上一篇 2017-09-16 11:32
下一篇 2017-09-16 12:32

相關推薦

欧美性久久久久