小E学Python PART1 NCRE二级_习题五
(第一篇居然是习题五->因为写1-4的时候没想到自己准备以这本书打开我的博客,还没搬上来)
写的都很繁琐而且可能有BUG,要继续修修补补,望各位不吝赐教:)
编程题
T1
实现isNum()函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回True,否则返回False.
def isNum(str):
try:
a=eval(str)
if (type(a)==int)|(type(a)==float)|(type(a)==complex):
return True
else:
return False
except:
return False
str=input()
print(isNum(str))
这道题居然卡住了一小会儿,脑回路阻塞在复数怎么判断上:( 非常感谢张同学给我这只小笨蛋的帮助↓
https://blog.csdn.net/weixin_43886356/article/details/86674160
总结:
复数怎么判断:复数的类型为complex,用type()判断
T2
实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False.
def isPrime(a):
k=0
try:
for i in range(2,int(a**0.5+1)):
if (a%i==0):
return False
break
return True
except:
print('error')
num=eval(input())
if num<=1:
print(False)
elif num==2|num==3:
print(True)
else:
m=isPrime(num)
print(m)
总结:
刚开始函数里面直接写成print(True),发现后边多了一个None,原来函数没有返回的时候会自动打印一个None。
T3
编写一个函数计算传入字符串中数字、字母、空格以及其他字符的个数。
def count(str):
str=str.lower()
num,alph,blank,other =0,0,0,0
length=len(str)
for i in range(length):
if ord(str[i]) in range(48,58):
num+=1
elif ord(str[i]) in range(65,98):
alph+=1
elif str[i]==' ':
blank+=1
else:
other+=1
return num,alph,blank,other
str=input('please enter a string:')
result=count(str)
print('{} number(s),{} alphbet(s),{} blank(s),{} other(s)'.format(result[0],result[1],result[2],result[3]))
总结:
用ord()得到ascll码进行字符类型判断。
T4
编写一个函数,打印200以内的所有素数,以空格分割。
def isPrime(a):
k=0
try:
for i in range(2,int(a**0.5+1)):
if (a%i==0):
return False
break
return True
except:
print('error')
print('2 3',end=' ')
for i in range (4,201):
m=isPrime(i)
if m==True:
print(i,end=' ')
总结:
看题的第一秒,脑子里想:素数是质数吗? 果然小学数学没学好
素数==质数!!
还偷懒了,直接拿第二题的代码改了一下(捂脸)
但是居然发现了第二题写的一个BUG,质数里居然打印出了121(捂脸)
检查发现我居然傻到用math.log(x,base) (捂脸)
我爱数学
T5
编写一个函数,参数为一个整数n。利用递归获取斐波那契数列中的第n个数并返回。
def f(a):
if (a==1 )|( a==2):
return 1
for i in range(1,a-1):
return f(a-i)+f(a-(i+1))
num=eval(input('please enter an integer:'))
print('The fibonacci number is {} '.format(f(num)))
总结:
果然不论什么语言,斐波那契数列大大总是会来的:)