Python​零基础100题,一起开启Python之旅吧!

picture.image

Python 是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,坚持「极简主义」。

Python 类库(模块)极其丰富,这使得 Python 几乎无所不能,不管是传统的 Web 开发、PC 软件开发、Linux 运维,还是当下火热的机器学习、大数据分析、网络爬虫,Python 都能胜任。

这篇练习通过100道题带你快速玩转python,一起开启Python之旅吧!

picture.image

具体内容如下↓↓↓

第1题

难度: 1级

问题: 编写一个程序,找到2000年至3200年(包括在内)中所有可被7整除但不能被5整除的所有数字,得到的数字按逗号分隔,打印在一行上。

提示: 考虑使用range(begin, end)方法


        
            

          l=[]  
for i in range(2000, 3201):  
    if (i%7 == 0) and (i%5 != 0):  
        l.append(str(i))  
print (','.join(l))
            

        
      

第2题

难度: 1级

问题: 编写一个可以计算给定数阶乘的程序,结果以逗号分隔,打印在一行上;假设向程序输入8,则输出40320;

提示: 在为问题提供输入数据的情况下,假设它是控制台输入。


        
            

          print('请输入一个数字:')  
n=int(input())  
d=dict()  
for i in range(1,n+1):  
    d[i]=i*i  
print(d)
            

        
      

第3题

难度: 1级

问题: 使用给定的整数n,编写程序生成一个包含(i, i×i)的字典,该字典包含从1到n之间的整数(两者都包含),然后打印字典。

假设向程序提供以下输入:8

则输出为:{1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64}

提示: 在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()


          
              

            print('请输入一个数字:')  
n=int(input())  
d=dict()  
for i in range(1,n+1):  
    d[i]=i*i  
print(d)
              

          
        

第4题

难度: 1级

问题: 编写一个程序,该程序接收控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组;

假设,向程序提供以下输入:34岁,67年,55岁,33岁,12日,98年;

则输出为:['34', '67', '55', '33', '12', '98'] ('34', '67', '55', '33', '12', '98')

提示: 在为问题提供输入数据的情况下,应该假设它是控制台输入,同时方法可以将列表转换为元组;


        
            

          import re  
print('请输入一组数字:')  
values=input()  
l=values.split(",")  
k=re.findall(r'[0-9]+',values)  
t=tuple(k)  
print (k)  
print (t)
            

        
      

第5题

难度: 1级

问题: 定义一个至少有两个方法的类: 一、getString:从控制台输入获取字符串;二、printString:打印大写母的字符串,并写出简单的测试函数来测试类方法。

提示: 使用init方法构造一些参数


        
            

          class InputOutString(object):  
    def \_\_init\_\_(self):  
        self.s = ""  
    def getString(self):  
        print('请输入字符串:')  
        self.s = input()  
    def printString(self):  
        print (self.s.upper())  
strObj = InputOutString()  
strObj.getString()  
strObj.printString()
            

        
      

第6题

难度: 2级

问题: 编写一个程序,根据给定的公式计算并打印值:Q=\sqrt{[(2CD)/H]}。其中,假设C=50。H=30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。

例:程序的输入序列为(以逗号分隔):100,150,180;则程序输出为:18,22,24;

提示: 如果输出是小数,则应四舍五入到其最近的值(例输出是26.0,则应打印为26)。


        
            

          import math  
c=50  
h=30  
value = []  
print('请输入一组数字:')  
items=[x for x in input().split(',')]  
for d in items:  
    value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))  
print (','.join(value))
            

        
      

第7题

难度: 2级

问题: 编写一个程序,X,Y作为输入,生成一个二维数组,数组的第i行和第j列的元素值应该是i×j。

注意:i= 0,1 . .,X - 1; j = 0, 1, Y-1。

假设,程序输入3, 5;则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]];

提示: 如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。


        
            

          print('请输入两个数字:')  
input\_str = input()  
dimensions=[int(x) for x in input\_str.split(',')]  
rowNum=dimensions[0]  
colNum=dimensions[1]  
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]  
for row in range(rowNum):  
    for col in range(colNum):  
        multilist[row][col]= row*col  
print (multilist)
            

        
      

第8题

难度: 2级

问题: 编写一个程序,以逗号分隔的单词序列作为输入,按照字母顺序对每个单词进行排序,并通过逗号分隔的序列来打印单词。

假设向程序输入:without,hello,bag,world;

则输出为:bag,hello,without,world;

提示: 在为问题提供输入数据的情况下,应该假设它是控制台输入。


        
            

          items=[x for x in input().split(',')]  
items.sort()  
print (','.join(items))
            

        
      

第9题

难度: 2级

问题 编写一个程序,接收一行序列作为输入,并在将句子中的所有字符大写后打印行。

假设向程序依次输入:Hello world;Practice makes perfect;

则输出为:HELLO WORLD;PRACTICE MAKES PERFECT;

提示: 在为问题提供输入数据的情况下,应该假设它是控制台输入。


        
            

          lines = []  
while True:  
    s = input()  
    if s:  
        lines.append(s.upper())  
    else:  
        break;  
for sentence in lines:  
    print(sentence)
            

        
      

第10题

难度: 2级

问题: 编写一个程序,以一系列空格分隔的单词作为输入,并在删除所有重复的单词后,按字母顺序排序后打印这些单词。

假设向程序输入:hello world and practice makes perfect and hello world again

则输出为:again and hello makes perfect practice world

提示: 我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序。


        
            

          print('请输入一组字符串:')  
s = input()  
words = [word for word in s.split(" ")]  
print (" ".join(sorted(list(set(words)))))
            

        
      

第11题

难度: 2级

问题: 编写一个程序,接收一系列以逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除,可被5整除的数字将以逗号分隔的顺序打印。

例: 0100,0011,1010,1001

那么输出应该是:1010

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          value = []  
print('请输入逗号分隔的4位二进制数:')  
items=[x for x in input().split(',')]  
for p in items:  
    intp = int(p, 2)  
    # print(intp)  
    if not intp%5:  
        value.append(p)  
print (','.join(value))
            

        
      

第12题

难度 :2级

问题: 编写一个程序,找到1000到3000之间并且所有位数均为偶数的所有数字,比如2000,2002等;获得的数字都以逗号分隔的顺序,打印在一行上。

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          values = []  
for i in range(1000, 3001):  
    s = str(i)  
    if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):  
        values.append(s)  
print (",".join(values))
            

        
      

第13题

难度: 2级

问题: 编写一个接受句子并计算字母和数字的程序。

假设程序输入:Hello world! 123

则输出应该是:字母10 数字3

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          print('请输入:')  
s = input()  
d={"DIGITS":0, "LETTERS":0}  
for c in s:  
    if c.isdigit():  
        d["DIGITS"]+=1  
    elif c.isalpha():  
        d["LETTERS"]+=1  
    else:  
        pass  
print ("字母", d["LETTERS"])  
print ("数字", d["DIGITS"])
            

        
      

第14题

难度: 2级

问题: 编写一个接收句子的程序,并计算大写字母和小写字母的数量。

假设为程序提供了以下输入:Hello world!

则输出应该是:UPPER CASE 1;LOWER CASE 9

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          print('请输入:')  
s = input()  
d={"UPPER CASE":0, "LOWER CASE":0}  
for c in s:  
    if c.isupper():  
        d["UPPER CASE"]+=1  
    elif c.islower():  
        d["LOWER CASE"]+=1  
    else:  
        pass  
print ("UPPER CASE", d["UPPER CASE"])  
print ("LOWER CASE", d["LOWER CASE"])
            

        
      

第15题

难度: 2级

问题: 编写一个程序,计算a + aa + aaa + aaaa的值,给定的数字作为a的值。

假设为程序提供了以下输入:9;输出应该是:11106

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          print('请输入一个数字:')  
a = input()  
n1 = int( "%s" % a )  
n2 = int( "%s%s" % (a,a) )  
n3 = int( "%s%s%s" % (a,a,a) )  
n4 = int( "%s%s%s%s" % (a,a,a,a) )  
print (n1+n2+n3+n4)
            

        
      

第16题

难度: 2级

问题: 使用列表推导输出列表中的每个奇数,该列表由一系列逗号分隔的数字输入。

假设程序输入:1,2,3,4,5,6,7,8,9

输出应该是:1,3,5,7,9


        
            

          print("输入:")  
values = input()  
numbers = [x for x in values.split(",") if int(x)%2!=0]  
print (",".join(numbers))
            

        
      

第17题

难度: 2级

问题 编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。事务日志格式如下所示:

D 100 W 200

D表示存款,而W表示提款。

假设向程序依次输入:D 300;D 300;W 200;D 100;

则输出应该为:500

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          netAmount = 0  
while True:  
    print("请输入:")  
    s = input()  
    if not s:  
        break  
    values = s.split(" ")  
    operation = values[0]  
    amount = int(values[1])  
    if operation=="D":  
        netAmount+=amount  
    elif operation=="W":  
        netAmount-=amount  
    else:  
        pass  
print (netAmount)
            

        
      

第18题

难度: 3级

问题: 网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码有效性。

以下是检查密码的标准:

1 [a-z]之间至少有1个字母

2 [0-9]之间至少有1个数字

3 [A-Z]之间至少有一个字母

4 [$#@]中至少有1个字符

5 最短交易密码长度:6

6 交易密码的最大长度:12

您的程序接收一系列逗号分隔的密码,并将根据上述标准进行检查,将打印符合条件的密码,每个密码用逗号分隔。

例: 如果以下密码作为程序的输入:ABd1234@1,a F1#,2w3E*,2We3345

则程序的输出应该是:ABd1234@1


        
            

          import re  
value = []  
print("请输入:")  
items=[x for x in input().split(',')]  
for p in items:  
    if len(p)<6 or len(p)>12:  
        continue  
    else:  
        pass  
    if not re.search("[a-z]",p):  
        continue  
    elif not re.search("[0-9]",p):  
        continue  
    elif not re.search("[A-Z]",p):  
        continue  
    elif not re.search("[$#@]",p):  
        continue  
    elif re.search("\s",p):  
        continue  
    else:  
        pass  
    value.append(p)  
print (",".join(value))
            

        
      

第19题

难度: 3级

问题: 您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字, 元组由控制台输入。

排序标准是:

1:根据名称排序;

2:然后根据年龄排序;

3:然后按分数排序。

优先级是name > age > 得分。

如果给出以下元组作为程序的输入:Tom,19,80;John,20,90;Jony,17,91;Jony,17,93;Json,21,85

然后,程序的输出应该是:[('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21 ','85'),('Tom','19','80')]

提示: 使用itemgetter来启用多个排序键。


        
            

          from operator import itemgetter, attrgetter  
l = []  
print("请输入:")  
while True:  
    s = input()  
    if not s:  
        break  
    l.append(tuple(s.split(",")))  
print (sorted(l, key=itemgetter(0,1,2)))
            

        
      

第20题

难度: 3级

问题: 使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

提示: 考虑使用yield。


        
            

          def putNumbers(n):  
    i = 0  
    while i<n:  
        j=i  
        i=i+1  
        if j%7==0:  
            yield j  
for i in putNumbers(100):  
    print (i)
            

        
      

第21题

难度: 3级

问题: 机器人从原点(0,0)开始在平面中移动,机器人可以通过给定的步骤向上,向下,向左和向右移动。

机器人运动的痕迹如下所示:

UP 5;DOWN 3;LETF 3;RIGHT 2;方向之后的数字是步骤。

请编写一个程序,计算一系列运动和原点之后距当前位置的距离。如果距离是浮点数,则只打印最接近的整数。

例: 如果程序输入:UP 5;DOWN 3;LETF 3;RIGHT 2

则程序的输出应该是:2

提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。


        
            

          import math  
pos = [0,0]  
print("请输入:")  
while True:  
    s = input()  
    if not s:  
        break  
    movement = s.split(" ")  
    direction = movement[0]  
    steps = int(movement[1])  
    if direction=="UP":  
        pos[0]+=steps  
    elif direction=="DOWN":  
        pos[0]-=steps  
    elif direction=="LEFT":  
        pos[1]-=steps  
    elif direction=="RIGHT":  
        pos[1]+=steps  
    else:  
        pass  
print (int(round(math.sqrt(pos[1]**2+pos[0]**2))))
            

        
      

第22题

难度: 3级

问题: 编写一个程序,来计算每个单词出现的频率,按字母顺序对键进行排序后输出。

假设程序输入:

New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

则输出应该是:

2:2

3.:1

3?:1

New:1

Python:5

Read:1

and:1

between:1

choosing:1

or:2

to:1


        
            

          freq = {}   # frequency of words in text  
print("请输入:")  
line = input()  
for word in line.split():  
    freq[word] = freq.get(word,0)+1  
words = sorted(freq.keys())  #按key值对字典排序  
for w in words:  
    print ("%s:%d" % (w,freq[w]))
            

        
      

第23题

难度: 1级

问题 写一个可以计算数字平方值的方法。

提示: 使用**运算符


        
            

          def square(num):  
    return num ** 2  
print(square(2))  
print(square(3))
            

        
      

第24题

难度: 1级

问题: Python有许多内置函数,如果不知道如何使用它,可以在线阅读文档或查找一些书籍。请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),input(),并为您自己的功能添加文档;

提示: 内置文档方法是doc;


        
            

          print(abs.\_\_doc\_\_)  
print(int.\_\_doc\_\_)  
print(input.\_\_doc\_\_)  
def square(num):  
    '''Return the square value of the input number.  
    The input number must be integer.  
    '''  
    return num ** 2  
print(square(2))  
print(square.\_\_doc\_\_)
            

        
      

第25题

难度: 1级

问题: 定义一个类,它具有类参数并具有相同的实例参数。

提示: 定义一个实例参数,需要在init方法中添加它。您可以使用构造参数初始化对象,也可以稍后设置该值


        
            

          class Person:  
    # Define the class parameter "name"  
    name = "Person"  
    def \_\_init\_\_(self, name=None):  
        # self.name is the instance parameter  
        self.name = name  
jeffrey = Person("Jeffrey")  
print("%s name is %s" % (Person.name, jeffrey.name))  
nico = Person()  
nico.name = "Nico"  
print("%s name is %s" % (Person.name, nico.name))
            

        
      

第26题

问题: 定义一个可以计算两个数之和的函数。

提示: 定义一个带有两个数字作为参数的函数。可以在函数中计算和并返回值。


        
            

          def SumFunction(number1, number2):  
 return number1+number2  
print(SumFunction(1,2))
            

        
      

第27题

问题: 定义一个可以将整数转换为字符串并在控制台中打印的函数。

提示: 使用str()将数字转换为字符串。

解决方案:


        
            

          def printValue(n):  
    print(str(n))  
printValue(3)
            

        
      

第28题

问题: 定义一个可以将字符串中的数字进行相加的函数。

提示: 使用int()将字符串转换为数字。


        
            

          def sum\_str(str1):  
  len1=len(str1)  
  sum = n = 0  
  for i in range(len1):  
    if 49 <= ord(str1[i]) <= 57:  #判断字符ascii码是否在数字ascii值范围内  
      n = int(str1[i]) + n  
    else:  
      sum = n + sum  
      n = 0  
  sum = n +sum  
  print(sum)  
str1 = "b532x2x3c4b5"  
sum\_str(str1)
            

        
      

第29题

问题: 定义一个函数,它可以接收两个字符串形式的整数并计算它们的和,然后在控制台中输出。

提示: 使用int()将字符串转换为整数。


        
            

          def printValue(s1,s2):  
    print(int(s1)+int(s2))  
printValue("3","4")
            

        
      

第30题

问题: 定义一个函数,它可以接受两个字符串作为输入,并将它们连接起来,然后在控制台中输出。

提示: 使用+连接字符串


        
            

          def printValue(s1,s2):  
    print(s1+s2)  
printValue("3","4") #34
            

        
      

第31题

问题: 定义一个函数,它可以接受两个字符串作为输入,并在控制台中以最大长度打印字符串。如果两个字符串长度相同,则函数应逐行打印所有字符串。

提示: 使用len()函数获取字符串的长度。


        
            

          def printValue(s1,s2):  
    len1 = len(s1)  
    len2 = len(s2)  
    if len1>len2:  
        print(s1)  
    elif len2>len1:  
        print(s2)  
    else:  
        print(s1)  
        print(s2)  
printValue("one","three")
            

        
      

第32题

问题: 定义一个函数,它可以接受一个整数作为输入,如果这个数字是偶数,则输出“它是偶数”,否则输出“它是奇数”。

提示: 使用%运算符检查一个数字是偶数还是奇数。


        
            

          def checkValue(n):  
    if n%2 == 0:  
        print("It is an even number")  
    else:  
        print("It is an odd number")  
checkValue(7)
            

        
      

第33题

问题: 定义一个函数,它可以打印一个字典,其中键是1到3之间的数字(包括在内),值是键的平方。

提示: 使用dict[key]=value模式将条目放入字典中。

使用**运算符得到一个数字的幂。


        
            

          def printDict():  
    d=dict()  
    d[1]=1  
    d[2]=2**2  
    d[3]=3**2  
    print(d)  
printDict()
            

        
      

第34题

问题: 定义一个函数,它可以打印一个字典,其中键是1到20之间的数字(包括在内),值是键的平方。

提示: 使用dict[key]=value模式将条目放入字典中。使用**操作符获取*一个数的幂。对循环使用range()。


        
            

          def printDict():  
 d=dict()  
 for i in range(1,21):  
  d[i]=i**2  
 print(d)  
printDict()
            

        
      

第35题

问题: 定义一个函数,它可以生成一个字典,其中键是1到20之间的数字(包括在内),值是键的平方。函数只输出值即可。

提示: 使用dict[key]=value模式将条目放入字典中。使用**操作符获取*一个数的幂。对于循环使用range()。使用keys()迭代字典中的键。我们还可以使用item()来获取键/值对。


        
            

          def printDict():  
 d=dict()  
 for i in range(1,21):  
  d[i]=i**2  
 for (k,v) in d.items():   
  print(v)  
printDict()
            

        
      

第36题

问题: 定义一个函数,它可以生成一个字典,其中键是1到20之间的数字(包括在内),值是键的平方。函数只打印键即可;

提示: 使用dict[key]=value模式将条目放入字典中。使用**运算符得到一个数字的幂,对循环使用range(),使用keys()迭代字典中的键,我们还可以使用item()来获取键/值对。


        
            

          def printDict():  
 d=dict()  
 for i in range(1,21):  
  d[i]=i**2  
 for k in d.keys():   
  print(k)  
printDict()
            

        
      

第37题

问题: 定义一个函数,它可以生成和打印一个列表,其中的值是1到20之间的数的平方(包括这两个数)。

提示: 使用**运算符得到一个数字的幂,对于循环使用range(),使用list.append()向列表中添加值。


        
            

          def printList():  
 li=list()  
 for i in range(1,21):  
  li.append(i**2)  
 print(li)  
printList()
            

        
      

第38题

问题: 定义一个函数,它可以生成一个列表,其中的值是1到20之间的数的平方(包括这两个数),然后函数需要打印列表中的前5个元素。

提示: 使用**运算符得到一个数字的幂。对循环使用range(),使用list.append()向列表中添加值,使用[n1:n2]对列表进行切片;


        
            

          def printList():  
 li=list()  
 for i in range(1,21):  
  li.append(i**2)  
 print(li[:5])  
printList()
            

        
      

第39题

问题: 定义一个函数,它可以生成一个列表,其中的值是1到20之间的数的平方(包括这两个数)。然后函数需要打印列表中的最后5个元素。

提示: 使用**运算符得到一个数字的幂。对循环使用range()。使用list.append()向列表中添加值。使用[n1:n2]对列表进行切片。


        
            

          def printList():  
 li=list()  
 for i in range(1,21):  
  li.append(i**2)  
 print(li[-5:])  
printList()
            

        
      

第40题

问题: 定义一个函数,它可以生成一个列表,其中的值是1到20之间的数的平方(包括这两个数)。然后,该函数需要打印列表中除前5个元素外的所有值。

提示: 使用**运算符得到一个数字的幂。对循环使用range()。使用list.append()向列表中添加值。使用[n1:n2]对列表进行切片;


        
            

          def printList():  
 li=list()  
 for i in range(1,21):  
  li.append(i**2)  
 print(li[5:])  
printList()
            

        
      

第41题

问题: 定义一个函数,它可以生成并打印一个元组,其中的值是1到20之间的数的平方(包括这两个数)。

提示: 使用**运算符得到一个数字的幂。对循环使用range()。使用list.append()向列表中添加值。使用tuple()从列表中获取一个元组。


        
            

          def printTuple():  
 li=list()  
 for i in range(1,21):  
  li.append(i**2)  
 print(tuple(li))  
printTuple()
            

        
      

第42题

问题: 对于给定的元组(1,2,3,4,5,6,7,8,9,10),编写一个程序,在一行中输出前半部分值,在一行中输出后半部分值。

提示: 使用[n1:n2]表示法从元组中获取切片。


        
            

          tp=(1,2,3,4,5,6,7,8,9,10)  
tp1=tp[:5]  
tp2=tp[5:]  
print(tp1)  
print(tp2)
            

        
      

第43题

问题: 编写程序生成并输出另一个元组,其值是给定元组(1,2,3,4,5,6,7,8,9,10)中的偶数。

提示: 使用“for”来迭代元组,使用tuple()从列表中生成一个tuple。


        
            

          tp=(1,2,3,4,5,6,7,8,9,10)  
li=list()  
for i in range(len(tp)):  
 if tp[i]%2==0:  
  li.append(tp[i])  
tp2=tuple(li)  
print(tp2)
            

        
      

第44题

问题: 写一个程序,接受一个字符串作为输入,如果字符串是“yes”或“YES”或“Yes”,否则打印“No”。

提示: 使用if语句判断条件。


        
            

          s= input()  
if s=="yes" or s=="YES" or s=="Yes":  
    print("Yes")  
else:  
    print("No")
            

        
      

第45题

问题: 编写一个程序,可以使用过滤函数过滤列表中的偶数。列表是:[1,2,3,4,5,6,7,8,9,10]。

提示: 使用filter()过滤列表中的一些元素。使用lambda定义匿名函数。


        
            

          li = [1,2,3,4,5,6,7,8,9,10]  
evenNumbers = filter(lambda x:x%2==0, li)  
for even in evenNumbers:  
    print(even)
            

        
      

第46题

问题: 编写一个程序,可以使用map()构造一个列表,其中的元素是[1,2,3,4,5,6,7,8,9,10]中元素的平方。

提示: 使用map()生成列表。使用lambda定义匿名函数。


        
            

          li = [1,2,3,4,5,6,7,8,9,10]  
squaredNumbers = map(lambda x:x**2, li)  
print(squaredNumbers)
            

        
      

第47题

问题: 编写一个程序,它可以map()和filter()生成一个列表,其中的元素是[1,2,3,4,5,6,7,8,9,101中的偶数的平方。

提示: 使用map()生成列表。使用filter()来过滤列表中的元素。使用lambda定义匿名函数。


        
            

          li = [1,2,3,4,5,6,7,8,9,10]  
evenNumbers = map(lambda x: x**2, filter(lambda x: x%2==0, li))  
print(evenNumbers)
            

        
      

第48题

问题: 编写一个程序,它可以filter()生成一个列表,其中的元素是1到20之间的偶数(包括两个元素)。

提示: 使用filter()来过滤列表中的元素。使用lambda定义匿名函数。


        
            

          evenNumbers = filter(lambda x: x%2==0, range(1,21))  
for even in evenNumbers:  
    print(even)
            

        
      

第49题

问题: 编写一个程序,它可以使用map()生成一个列表,其中的元素是1到20之间的数的平方(包括两个数)。

提示: 使用map()生成列表。使用lambda定义匿名函数。


        
            

          squaredNumbers = map(lambda x: x**2, range(1,21))  
print(squaredNumbers)
            

        
      

第50题

问题: 定义一个名为American的类,它有一个名为printNationality的静态方法。

提示: 使用@staticmethod装饰器来定义类的静态方法。


        
            

          class American(object):  
    @staticmethod  
    def printNationality():  
        print("America")  
anAmerican = American()  
anAmerican.printNationality()  
American.printNationality()
            

        
      

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

        
      

第76题

问题: 请编写一个程序输出O和10之间的随机偶数使用随机模块和列表理解。

提示: 对列表中的随机元素使用random.choice()。


        
            

          import random  
print(random.choice([i for i in range(11) if i%2==0]))
            

        
      

第77题

问题: 请编写一个程序输出一个随机数,它可以被5和7整除,在0和10之间,使用随机模块和列表理解。

提示: 对列表中的随机元素使用random.choice()。


        
            

          import random  
print(random.choice([i for i in range(201) if i%5==0 and i%7==0]))
            

        
      

第78题

问题: 请编写一个程序生成一个包含100到200之间的5个随机数的列表。

提示: 使用random.sample()生成一个随机值列表。


        
            

          import random  
print(random.sample(range(100), 5))
            

        
      

第79题

问题: 请编写一个程序随机生成一个列表,其中包含100到200之间的5个偶数。

提示: 使用random.sample()生成一个随机值列表。


        
            

          import random  
print(random.sample([i for i in range(100,201) if i%2==0], 5))
            

        
      

第80题

问题: 请编写一个程序,随机生成一个列表,从1到1000(含1000),有5个数字,可以被5和7整除。

提示: 使用random.sample()生成一个随机值列表。


        
            

          import random  
print(random.sample([i for i in range(1,1001) if i%5==0 and i%7==0], 5))
            

        
      

第81题

问题: 请写一个程序来随机打印一个7到15之间的整数(包括15)。

提示: 使用random.randrange()到一个给定范围内的随机整数。


        
            

          import random  
print(random.randrange(7,16))
            

        
      

第82题

问题: 请编写一个程序来压缩和解压字符串"hello world!hello world!hello world!hello world!"。

提示: 使用zlib.compress()和zlib.decompress()来压缩和解压缩字符串。


        
            

          import zlib  
s = b'hello world!hello world!hello world!hello world!'  
t = zlib.compress(s)  
print(t)  
print(zlib.decompress(t))
            

        
      

第83题

问题: 请编写一个程序打印100次“1+1”执行的运行时间。

提示: 使用timeit()函数测量运行时间。


        
            

          from timeit import Timer  
t = Timer("for i in range(100):1+1")  
print(t.timeit())
            

        
      

第84题

问题: 请编写一个程序洗牌和打印列表[3,6,7,8]。

提示: 使用shuffle()函数洗牌列表。


        
            

          from random import shuffle  
li = [3,6,7,8]  
shuffle(li)  
print(li)
            

        
      

第85题

问题: 请编写一个程序洗牌和打印列表[3,6,7,8]。

提示: 使用shuffle()函数洗牌列表。


        
            

          from random import shuffle  
li = [3,6,7,8]  
shuffle(li)  
print(li)
            

        
      

第86题

问题: 请编写一个程序,生成主语在 ["I", "You"],动词在["Play", "Love"]中,对象在["Hockey","Football"]中的所有句子.

提示: 使用list[index]表示法从列表中获取元素。


        
            

          subjects=["I", "You"]  
verbs=["Play", "Love"]  
objects=["Hockey","Football"]  
for i in range(len(subjects)):  
    for j in range(len(verbs)):  
        for k in range(len(objects)):  
            sentence = "%s %s %s." % (subjects[i], verbs[j], objects[k])  
            print(sentence)
            

        
      

第87题

问题: 请写一个程序打印列表,删除后删除偶数[5,6,77,45,22,12,24]。

提示 使用列表理解从列表中删除一组元素。


        
            

          li = [5,6,77,45,22,12,24]  
li = [x for x in li if x%2!=0]  
print(li)
            

        
      

第88题

问题: 使用列表理解,请编写程序,删除[12,24,35,70,88,120,155]中可被5和7整除的删除数后,打印列表。

提示: 使用列表理解从列表中删除一组元素。


        
            

          li = [12,24,35,70,88,120,155]  
li = [x for x in li if x%5!=0 and x%7!=0]  
print(li)
            

        
      

第89题

问题: 使用列表理解法,请编写一个程序,去掉[12,24,35,70,88,120,155]中的第0,2,4,6位置上的元素后打印列表。

提示: 使用列表理解从列表中删除一组元素。使用enumerate()来获取(索引,值)元组。


          
              

            li = [12,24,35,70,88,120,155]  
li = [x for (i,x) in enumerate(li) if i%2!=0]  

            print(li)
              

          
        

第90题

问题: 使用列表理解,编写一个程序生成一个358三维数组,每个元素为0。

提示: 使用列表理解来创建数组。


        
            

          array = [[ [0 for col in range(8)] for col in range(5)] for row in range(3)]  
print(array)
            

        
      

第91题

问题: 利用列表理解,请编写一个程序,去掉[12,24,35,70,88,120,155]中的第0,第4,第5个数字后,将列表打印出来。

提示: 使用列表理解从列表中删除一组元素。使用enumerate()来获取(index, value)元组。


        
            

          li = [12,24,35,70,88,120,155]  
li = [x for (i,x) in enumerate(li) if i not in (0,4,5)]  
print(li)
            

        
      

第92题

问题: 通过使用列表理解,请编写一个程序,在[12,24,35,24,88,120,155]中删除值24后打印列表。

提示: 使用列表的remove方法删除一个值。


        
            

          li = [12,24,35,24,88,120,155]  
li = [x for x in li if x!=24]  
print(li)
            

        
      

第93题

问题: 对于两个已知链表[1,3,6,78,35,55]和[12,24,35,24,88,120,155],编写一个程序来生成一个元素为上述两个链表交集的链表。

提示: 使用set()和"&="进行集合相交操作。


        
            

          set1=set([1,3,6,78,35,55])  
set2=set([12,24,35,24,88,120,155])  
set1 &= set2  
li=list(set1)  
print(li)  

        
      

第94题

问题: 对于给定的列表[12,24,35,24,88,120,155,88,120,155],编写一个程序来打印这个列表-删除所有重复的值与原始顺序保留。

提示: 使用set()来存储一些没有重复的值。


        
            

          def removeDuplicate( li ):  
    newli=[]  
    seen = set()  
    for item in li:  
        if item not in seen:  
            seen.add( item )  
            newli.append(item)  
    return newli  
li=[12,24,35,24,88,120,155,88,120,155]  
print(removeDuplicate(li))
            

        
      

第95题

问题: 定义一个类Person和它的两个子类:Male和Female。所有的类都有一个方法“getGender”,它可以打印“Male”为男性类,“Female”为女性类。

提示: 使用子类(Parentclass)来定义子类。


        
            

          class Person(object):  
    def getGender( self ):  
        return "Unknown"  
class Male( Person ):  
    def getGender( self ):  
        return "Male"  
class Female( Person ):  
    def getGender( self ):  
        return "Female"  
aMale = Male()  
aFemale= Female()  
print(aMale.getGender())  
print(aFemale.getGender())
            

        
      

第96题

问题: 请编写一个程序,计算并打印由控制台输入的字符串中的每个字符的数量。

示例: 如果下面的字符串作为程序的输入:abcdefgab;

那么,程序的输出应该是:a,2 c,2 b,2 e,1 d,1 g,1 f,1;

提示: 使用dict存储键/值对。使用dict.get()方法查找具有默认值的键。


        
            

          dic = {}  
s=input()  
for s in s:  
    dic[s] = dic.get(s,0)+1  
print('\n'.join(['%s,%s' % (k, v) for k, v in dic.items()]))
            

        
      

第97题

问题: 请编写一个程序,从控制台接收一个字符串,并以相反的顺序打印出来。

示例: 如果下面的字符串作为程序的输入:rise to vote sir;

那么,程序的输出应该是:ris etov ot esir;提示:使用list[::-1]以相反的顺序迭代一个列表。


        
            

          s=input()  
s = s[::-1]  
print(s)
            

        
      

第98题

问题: 请编写一个程序,从控制台接收一个字符串,并打印具有偶数索引的字符;

示例: 如果下面的字符串作为程序的输入:H1e2l3l4o5w6o7r8l9d

那么,程序的输出应该是:Helloworld;

提示: 使用list[:2]来迭代第2步中的列表。


        
            

          s=input()  
s = s[::2]  
print(s)
            

        
      

第99题

问题: 请写一个程序,打印[1,2,3]的所有排列;

提示: 使用itertools.permutations)得到list的排列。


        
            

          import itertools  
print(list(itertools.permutations([1,2,3])))
            

        
      

第100题

问题: 写一个程序来解决一个中国古代的经典难题:我们数农场里的鸡和兔子中有35个头和94条腿。我们有多少只兔子和多少只鸡?

提示: 使用for循环来迭代所有可能的解决方案。


        
            

          def solve(numheads,numlegs):  
    ns='No solutions!'  
    for i in range(numheads+1):  
        j=numheads-i  
        if 2*i+4*j==numlegs:  
            return i,j  
    return ns,ns  
  
numheads=35  
numlegs=94  
solutions=solve(numheads,numlegs)  
print(solutions)  

        
      

想了解更多算法,数据分析,数据挖掘等方面的知识,欢迎关注ChallengeHub公众号,添加微信进入微信交流群,或者进入QQ交流群。各种志同道合的小伙伴一起学习成长。

picture.image

picture.image

picture.image

0
0
0
0
评论
未登录
暂无评论