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.178linux.com/87229

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

相关推荐