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