本专栏主要涉及到100道Python零基础编程题,大部分题型翻译于Github上的100+ Python challenging programming exercises,如果小伙伴对于英语没有阅读障碍,可以去Github上阅读。专栏共有100题,分为四章,每章25道题;本篇博客为Python零基础编程的第三篇【51-75】;好了,废话不多说,开始展开;
和鲸社区链接:Python零基础100题,无忌,让为师看看你还记得多少
和鲸社区聚集了大量的数据爱好者和数据从业者,社区内有很多优质的数据分析Python项目,我也是在里面学到很多数据相关的知识呀,真的是受益良多,对数据感兴趣的小伙伴可以去玩一玩,与其他小伙伴一起学习、交流、参加训练营以及参加比赛等,探索数据的新世界,快来跟我一起加入【和鲸社区】把!
第51题
问题:定义一个名为American的类及其子类NewYorker。
提示:使用类子类(ParentClass)来定义子类。
class American(object):
pass
class NewYorker(American):
pass
anAmerican = American()
aNewYorker = NewYorker()
print(anAmerican)
print(aNewYorker)
第52题
问题:定义一个名为Circle的类,可以用半径来构造。Circle类有一个可以计算面积的方法。
提示:使用def methodName(self)定义一个方法。
class Circle(object):
def __init__(self, r):
self.radius = r
def area(self):
return self.radius**2*3.14
aCircle = Circle(2)
print(aCircle.area())
第53题
问题:定义一个名为Rectangle的类,它可以由长度和宽度构造。矩形类有一个方法可以计算面积。
提示:使用def methodName(self)定义一个方法。
class Rectangle(object):
def __init__(self, l, w):
self.length = l
self.width = w
def area(self):
return self.length*self.width
aRectangle = Rectangle(2,10)
print(aRectangle.area())
第54题
问题:定义一个名为Shape的类及其子类Square。Square类有一个init函数,它以长度作为参数。这两个类都有一个area函数,可以打印形状的区域,形状的区域默认为0。
提示:要覆盖父类中的方法,可以在父类中定义一个同名的方法。
class Shape(object):
def __init__(self):
pass
def area(self):
return 0
class Square(Shape):
def __init__(self, l):
Shape.__init__(self)
self.length = l
def area(self):
return self.length*self.length
aSquare= Square(3)
print(aSquare.area())
第55题
问题:请引发RuntimeError异常。
提示:使用raise()引发异常。
raise RuntimeError('something wrong')
第56题¶
问题:编写一个函数来计算5/0,并使用try/except来捕获异常。
提示:使用try/exexception捕获异常。
def throws():
return 5/0
try:
throws()
except ZeroDivisionError:
print("division by zero!")
except ExceptionError:
print('Caught an exception')
finally:
print('In finally block for cleanup')
第57题
问题:定义一个自定义异常类,它将字符串消息作为属性。
提示:要定义一个自定义异常,我们需要定义一个继承自exception的类。
class MyError(Exception):
"""My own exception class
Attributes:
msg -- explanation of the error
"""
def __init__(self, msg):
self.msg = msg
error = MyError("something wrong")
第58题
问题:假设我们有一些'username@companyname.com '格式的电子邮件地址,请编写程序打印给定电子邮件地址的用户名,用户名和公司名都只由字母组成。
示例:如果下面的电子邮件地址作为程序的输入:john@google.com.
那么,程序的输出应该是:john
在向问题提供输入数据的情况下,应该假定它是控制台输入。
提示:使用\w来匹配字母。
import re
emailAddress = input()
pat2 = "(\w+)@((\w+\.)+(com))"
r2 = re.match(pat2,emailAddress)
print(r2.group(1))
第59题
问题:假设我们有一些“username@companyname.com”格式的电子邮件地址,请编写程序打印给定的电子邮件地址的公司名称;用户名和公司名都只由字母组成。
示例:如果下面的电子邮件地址作为程序的输入:john@google.com
那么,程序的输出应该是:google
在向问题提供输入数据的情况下,应该假定它是控制台输入。
提示:使用\w来匹配字母。
import re
emailAddress = input()
pat2 = "(\w+)@(\w+)\.(com)"
r2 = re.match(pat2,emailAddress)
print(r2.group(2))
第60题
问题:编写一个程序,接收一个由空格分隔的单词序列作为输入,打印只由数字组成的单词。
示例:如果下面的单词作为程序的输入:2 cats and 3 dogs;
那么,程序的输出应该是:['2', '3']
在向问题提供输入数据的情况下,应该假定它是控制台输入。
提示:使用re.findall()使用正则表达式查找所有子字符串。
import re
s = input()
print(re.findall("\d+",s))
第61题
问题:打印unicode字符串“hello world”。
提示:使用u'strings'格式来定义unicode字符串;
unicodeString = u"hello world!"
print(unicodeString)
第62题
问题:python中的解码与编码;
提示:使用encode()与decode()函数进行转换。
s = '和鲸社区'
enc = s.encode('utf-8')
dec = enc.decode('utf-8')
print(enc)
print(dec)
第63题
问题:编写一个特殊注释来表明Python源代码文件是unicode格式的。
# -*- coding: utf-8 -*-
#----------------------------------------#
第64题¶
问题:写一个程序来计算1/2+2/3+3/4+......+n/(n+1)。
示例:如果下面的n作为程序的输入:5;
那么,程序的输出应该是:3.55;
提示:使用float()将整数转换为浮点数。
n=int(input())
sum=0.0
for i in range(1,n+1):
sum += float(float(i)/(i+1))
print(sum)
第65题
问题:编写程序计算:当n>0和F(0)=1时,F(n)=F(n-1)+100通过控制台输入一个给定的n (n>0)。
示例:如果下面的n作为程序的输入:5;
那么,程序的输出应该是:500;
提示:我们可以在Python中定义递归函数。
def f(n):
if n==0:
return 0
else:
return f(n-1)+100
n=int(input())
print(f(n))
第66题¶
问题:斐波那契数列的计算公式如下:如果n=0,f(n)=0;如果n=1,f(n)=1;如果n>1,f(n)=f(n-1)+f(n-2);请编写一个程序,在控制台输入给定n的情况下计算f(n)的值。
示例:如果下面的n作为程序的输入:7;
那么,程序的输出应该是:13;
提示:我们可以在Python中定义递归函数。
def f(n):
if n == 0: return 0
elif n == 1: return 1
else: return f(n-1)+f(n-2)
n=int(input())
print(f(n))
第67题
问题:斐波那契数列的计算公式如下:如果n=0,f(n)=0;如果n=1,f(n)=1;如果n>1,f(n)=f(n-1)+f(n-2);请编写一个程序使用列表理解输出逗号分隔的Fibonacci序列,并通过控制台输入给定的n。
示例:如果下面的n作为程序的输入:7;
那么,程序的输出应该是:0,1,1,2,3,5,8,13;
提示:我们可以在Python中定义递归函数。使用列表理解从现有列表生成列表。使用string.join()连接字符串列表。
def f(n):
if n == 0: return 0
elif n == 1: return 1
else: return f(n-1)+f(n-2)
n=int(input())
values = [str(f(x)) for x in range(0, n+1)]
print(",".join(values))
第68题
问题:请使用generator编写一个程序,当n由控制台输入时,以逗号分隔的形式输出0和n之间的偶数;
示例:如果下面的n作为程序的输入10;
那么,程序的输出应该是:0,2,4,6,8,10;
提示:使用yield生成生成器中的下一个值。
def EvenGenerator(n):
i=0
while i<=n:
if i%2==0:
yield i
i+=1
n=int(input())
values = []
for i in EvenGenerator(n):
values.append(str(i))
print(",".join(values))
第69题
问题:请编写一个生成器程序,以逗号分隔的形式输出0到n之间可以被5和7整除的数字,而n是通过控制台输入的。
示例:如果下面的n作为程序的输入:100;
那么,程序的输出应该是:0,35,70;
提示:使用yield生成生成器中的下一个值。
def NumGenerator(n):
for i in range(n+1):
if i%5==0 and i%7==0:
yield i
n=int(input())
values = []
for i in NumGenerator(n):
values.append(str(i))
print(",".join(values))
第70题
问题:请写assert语句来验证列表[2,4,6,8]中的每个数字都是偶数。
提示:使用“断言表达式”进行断言。
li = [2,4,6,8]
for i in li:
assert i%2==0
第71题
问题:请编写一个程序,从控制台接收基本数学表达式,并输出计算结果。
示例:如果下面的字符串作为程序的输入:35 + 3;
那么,程序的输出应该是:38;
提示:使用eval()计算表达式。
expression = input()
print(eval(expression))
第72题
问题:请编写一个二分搜索函数,搜索排序列表中的项。函数应该返回要在列表中搜索的元素的索引。
提示:使用if/elif来处理条件。
import math
def bin_search(li, element):
bottom = 0
top = len(li)-1
index = -1
while top>=bottom and index==-1:
mid = int(math.floor((top+bottom)/2.0))
if li[mid]==element:
index = mid
elif li[mid]>element:
top = mid-1
else:
bottom = mid+1
return index
li=[2,5,7,9,11,17,222]
print(bin_search(li,11))
print(bin_search(li,12))
第73题
问题:随机生成1,100内的一个整数;
提示:random.randint()
import random
random.randint(a=1,b=100)
第74题
问题:请使用Python math模块生成一个值在10到100之间的随机浮点数。
提示:使用random.random()在[0,1]中生成一个随机浮点数。
import random
print(random.random()*100)
第75题
问题:请使用Python math模块生成一个值在5到95之间的随机浮点数。
提示:使用random.random()在[0,1]中生成一个随机浮点数。
import random
print(random.random()*100-5)
好了,到这里为止,Python零基础编程100题第三篇【51-75】题已经结束了,小伙伴们好好练习,先自己思考思考,不会做的情况下在看答案哦,这样才能够提高的更快!如果哪里有疑问的地方,欢迎在评论区留言,我会不断完善的!
来都来了,确定不留下点什么嘛,嘻嘻~