第三章习题

1、打印2000-3000之间被7整除但不被5整除的数,以,(逗号)分隔

>>> for i in range(2000,3001):
...     if i % 7 == 0 and i % 5 != 0:
...         print(i,end=",")
...
2002,2009,2016,2023,2037,2044,2051,2058,2072,2079,2086,2093,2107,2114,2121,2128,
2142,2149,2156,2163,2177,2184,2191,2198,2212,2219,2226,2233,2247,2254,2261,2268,
2282,2289,2296,2303,2317,2324,2331,2338,2352,2359,2366,2373,2387,2394,2401,2408,
2422,2429,2436,2443,2457,2464,2471,2478,2492,2499,2506,2513,2527,2534,2541,2548,
2562,2569,2576,2583,2597,2604,2611,2618,2632,2639,2646,2653,2667,2674,2681,2688,
2702,2709,2716,2723,2737,2744,2751,2758,2772,2779,2786,2793,2807,2814,2821,2828,
2842,2849,2856,2863,2877,2884,2891,2898,2912,2919,2926,2933,2947,2954,2961,2968,
2982,2989,2996,>>>

2、输出9*9口诀表

>>> for i in range(1,10):
...     for j in range(1,i+1):
...         print(str(i)+"*"+str(j)+"=",i*j," ",end="")
...     print()
...
1*1= 1
2*1= 2  2*2= 4
3*1= 3  3*2= 6  3*3= 9
4*1= 4  4*2= 8  4*3= 12  4*4= 16
5*1= 5  5*2= 10  5*3= 15  5*4= 20  5*5= 25
6*1= 6  6*2= 12  6*3= 18  6*4= 24  6*5= 30  6*6= 36
7*1= 7  7*2= 14  7*3= 21  7*4= 28  7*5= 35  7*6= 42  7*7= 49
8*1= 8  8*2= 16  8*3= 24  8*4= 32  8*5= 40  8*6= 48  8*7= 56  8*8= 64
9*1= 9  9*2= 18  9*3= 27  9*4= 36  9*5= 45  9*6= 54  9*7= 63  9*8= 72  9*9= 81
>>> for i in range(1,10):
...     for j in range(1,i+1):
...         print(str(i)+"*"+str(j)+"="+str(i*j),end=" ")
...     print()
...
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
>>>
>>>
>>>
>>> for i in range(1,10):
...     for j in range(1,i+1):
...         print(str(i)+"*"+str(j)+"=%s" %(i*j),end=" ")
...     print()
...
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

3、计算1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …直到最后一项的绝对值小于10的-5次幂为止

>>> result = 0.0
>>> n = 1
>>> while 1:
...     if abs(1/n) < pow(10,-5):
...         break
...     else:
...         if n % 2 == 1:
...             result += 1/n
...             n += 1
...         else:
...             result -= 1/n
...             n += 1
...
>>> print(result)
0.6931421805849816

4、编程将类似“China”这样的明文译成密文,密码规律是:用字母表中原来的字母后面第4个字母代替原来的字母,不能改变其大小写,如果超出了字母表最后一个字母则回退到字母表中第一个字母。

>>> def encode_letter(s):
...     result = ""
...     if not isinstance(s,str):
...         print("请输入字符串!")
...         return None
...     for i in s:
...         if (i >"a" and i < "v") or (i >"A" and i < "V"):
...             result += chr(ord(i)+4)
...         elif (i >"w" and i < "z") or (i >"W" and i < "Z"):
...             result += chr(ord(i)-22)
...     return result
...
>>> print(encode_letter("China"))
Glmr

5、输出以下如下规律的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

>>> for i in range(1,5):
...     for j in range(1,6):
...         if i == 1:
...             print(j,end=" ")
...         elif i == 2:
...             print(j*2,end=" ")
...         elif i == 3:
...             print(j*3,end=" ")
...         elif i == 4:
...             print(j*4,end=" ")
...     print()
...
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

6、对一个列表求和,如列表是[4, 3, 6],求和结果是 [4, 7, 13],每一项的值都等与该项的值加上前一项的值

>>> a = [4,3,6]
>>> result = []
>>> for i in range(len(a)):
...     result.append(sum(a[0:i+1]))
...
>>> print(result)
[4, 7, 13]
>>> from functools import reduce
>>> a = [4,3,6]
>>> result = []
>>> temp_list = []
>>> for i in a:
...     temp_list.append(i)
...     result.append(reduce(lambda x,y:x+y,temp_list))
...
>>> print(result)
[4, 7, 13]

7、一个字符串 list,每个元素是 1 个 ip,输出出现次数最多的 ip

>>> ip_list = ["127.0.0.1","127.0.0.1","192.168.2.10","192.168.2.11","192.168.2.
12"]
>>> d = {}
>>> for ip in ip_list:
...     d[ip] = ip_list.count(ip)
...
>>> for k,v in d.items():
...     if v == max(d.values()):
...         print("出现次数最多的ip:",k)
...
出现次数最多的ip: 127.0.0.1

8、打印100以内的素数

>>> def is_prime(num):
...     for i in range(2,num):
...         #print(i)
...         if num % i == 0:
...             return False
...     return True
...
>>> for k in range(1,101):
...     if is_prime(k):
...         print(k,end=" ")
...
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 >>>
>>> import math
>>> def is_prime(num):
...     for i in range(2,int(math.sqrt(num)+1)):
...         #print(i)
...         if num % i == 0:
...             return False
...     return True
...
>>> for k in range(1,101):
...     if is_prime(k):
...         print(k,end=" ")
...
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 >>>

9、实现一个简易版的计算器,功能要求:加、减、乘、除,支持多数同时进
行计算

#encoding=utf-8

def calc(*args):
    help_info = \
    """
    add:加法
    sub:减法
    mul:乘法
    div:除法
    """
    print(help_info)
    result = 0.0
    command = input("请输入命令:")
    if command == "add":
        for i in args:
            result += i
    elif command == "sub":
        for i in args:
            if result == 0.0:
               result = i
            else:
               result -= i
            print(i,result)
    elif command == "mul":
        for i in args:
            if result == 0.0:
               result = i
            else:
               result *= i
    elif command == "div":
        for i in args:
            if result == 0.0:
               result = i
            else:
               result /= i
    return result

print(calc(1,2,3))

在这里插入图片描述
10、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前
20项之和

>>> result = 0.0
>>> a = 2
>>> b = 1
>>> for i in range(20):
...     print(a,b)
...     result += a/b
...     temp = b
...     b = a
...     a = temp + b
...
2 1
3 2
5 3
8 5
13 8
21 13
34 21
55 34
89 55
144 89
233 144
377 233
610 377
987 610
1597 987
2584 1597
4181 2584
6765 4181
10946 6765
17711 10946
>>> print(result)
32.66026079864164

11、画等(腰)边三角形(实心、空心)

>>> for i in range(1,7):
...     print("\n")
...     for k in range(i,7):
...         print  (" ",end="")
...     for j in range(i):
...         print  ("*  ",end="")
...


      *

     *  *

    *  *  *

   *  *  *  *

  *  *  *  *  *

 *  *  *  *  *  *  >>>
>>> for i in range(1,7):
...     print ("\n")
...     for k in range(i,7):
...         print  (" ",end="")
...     for j in range(i):
...         if i >= 3 and i < 6:
...             if j==0 or j==i-1:
...                 print ("*   ",end="")
...             else:
...                 print ("    ",end="")
...         else:
...             print  ("*   ",end="")
...


      *

     *   *

    *       *

   *           *

  *               *

 *   *   *   *   *   *   >>>

12、画倒等边三角形

>>> for i in range(1,7):
...     print()
...     for k in range(i):
...         print(" ",end="")
...     for j in range(i,7):
...         print(" *",end="")
...

  * * * * * *
   * * * * *
    * * * *
     * * *
      * *
       *>>>

13、画直角三角形(实心、空心)

>>> for i in range(1,7):
...     print()
...     for k in range(i):
...         print("* ",end="")
...

*
* *
* * *
* * * *
* * * * *
* * * * * * >>>
>>> for i in range(7):
...     print()
...     for k in range(i):
...         if i >= 3 and i <= 5:
...             if k ==0 or k == i - 1:
...                 print("* ",end="")
...             else:
...                 print("   ",end="")
...         else:
...             print("*  ",end="")
...


*
*  *
*    *
*       *
*          *
*  *  *  *  *  *  >>>

18、要求实现一函数,该函数用于求两个集合的差集,结果集合中包含
所有属于第一个集合但不属于第二个集合的元素

>>> def diff_set(s1,s2):
...     diff_set = []
...     for i in s1:
...         if i not in s2:
...             diff_set.append(i)
...     return set(diff_set)
...
>>> set_1 = {1,2,3,6,8}
>>> set_2 = {1,2,3,5,6,7}
>>> print(diff_set(set_1,set_2))
{8}

19、找出一段句子中最长的单词及其索引位置,以list返回

import string
s = "I am a beautiful girl, lihongsong!"
def find_max_length_word(ss):
    for i in ss:
        if i in string.punctuation:
            ss = ss.replace(i,"")
    print(ss)

    ss = sorted(ss.split(),key=len,reverse=True)
    print(ss)
    max_length_word = ss[0]
    max_length_word_index = 0
    max_length = len(max_length_word)
    for j in range(len(s)):
        if s[j:j+max_length] == max_length_word:
            max_length_word_index = j

    return max_length_word,max_length_word_index

print("最长的单词是%s,索引位置是%d" %find_max_length_word(s))

在这里插入图片描述
20、返回序列中的最大数

>>> def find_max_num(seq):
...     if not isinstance(seq,(list,tuple,str)):
...         print("请传入序列!")
...         return None
...     max_num = 0.0
...     if isinstance(seq,str):
...         for i in seq:
...             if float(i) > max_num:
...                 max_num = float(i)
...     else:
...         for i in seq:
...             if i > max_num:
...                 max_num = i
...     return max_num
...
>>> print(find_max_num([1,2,3,6,4,9,5]))
9
>>> print(find_max_num((1,2.8,3.2,1.6,4.9,5)))
5
>>> print(find_max_num("976475"))
9.0
>>> print(find_max_num(1236))
请传入序列!
None
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值