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


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//2
for 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=0
    n=1
    while True:
        print(n)
        q=m+n
        m=n
        n=q
        if n>100:
            break
    
    #构思方法:
    #遇到类似的题,先把第二项赋值给第一项,第三项赋值给第二项,这样他们就变成了下一轮的第一项和第二项。
    例如:
    a=1,b=2,c=a+b
    a=b
    b=c
    

m=0
n=1
while 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=0
n=1
count=0
while 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=1
    for 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 +=1
    print(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=1
for 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 +=1
print(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=0
sum=0
while True:
    n =input()
    if n='q':
        break
    sum += int(n)
    count += 1
    avg=sum/count
print(avg)

3.猴子吃桃问题

猴子第一天摘下若干个桃,当即就吃了一半,还不过瘾,又吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天都是吃掉一半,又吃一个。到第十天早上想吃时,只剩下一个桃子。求第一天摘了多少个?

peach=1
for _ in range(1,10):
    peach = 2*(peach+1)
print(peach)

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/87229

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐直属QQ  万达娱乐注册  万达开户  万达直属QQ  万达招商  测试  万达娱乐招商QQ  万达娱乐主管QQ  万达娱乐  万达娱乐注册