Python之基础练习题

1、执行 Python 脚本的两种方式

2、简述位、字节的关系

  解:8位是一个字节

3、简述 ascii、unicode、utf-8、gbk 的关系

4、请写出 “李杰” 分别用 utf-8 和 gbk 编码所占的位数

5、Pyhton 单行注释和多行注释分别用什么?

6、声明变量注意事项有那些?

8、如何查看变量在内存中的地址?

9、执行 Python 程序时,自动生成的 .pyc 文件的作用是什么?

10、写代码
  a.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!

  1. username = input("username>>:")
  2. password = input("password>>:")
  3.  
  4. if username == "seven" and password == "":
  5. print("OK")
  6. else:
  7. print("username or password error ! ")

  b.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

  c.实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

11、写代码
  a. 使用while循环实现输出2-3+4-5+6...+100 的和
  b. 使用for循环和range实现输出 1-2+3-4+5-6...+99 的和
  c. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12
d. 使用 while 循环实现输出 1-100 内的所有奇数
  e. 使用 while 循环实现输出 1-100 内的所有偶数

12、分别书写数字 5,10,32,7 的二进制表示

13、简述对象和 类的关系(可用比喻的手法)

14、现有如下两个变量,请简述 n1 和 n2 是什么关系?

  n1 = 123

  n2 = 123

15、现有如下两个变量,请简述 n1 和 n2 是什么关系?

  n1 = 123456

  n2 = 123456

16、现有如下两个变量,请简述 n1 和 n2 是什么关系?

   n1 = 123456

  n2 = n1
17、如有一下变量 n1 = 5,请使用 int 的提供的方法,得到该变量最少可以用多少个二进制位表示?

18、布尔值分别有什么?

19、阅读代码,请写出执行结果

  a = "alex"
  b = a.capitalize()
print(a)
  print(b)

  请写出输出结果:

20、写代码,有如下变量,请按照要求实现每个功能

  name = " aleX"

  a. 移除 name 变量对应的值两边的空格,并输入移除有的内容

  b. 判断 name 变量对应的值是否以 "al" 开头,并输出结果
  c. 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
  d. 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
e. 将 name 变量对应的值根据 “l” 分割,并输出结果。

  f. 请问,上一题 e 分割之后得到值是什么类型?
g. 将 name 变量对应的值变大写,并输出结果
  h. 将 name 变量对应的值变小写,并输出结果
  i. 请输出 name 变量对应的值的第 2 个字符?

  j. 请输出 name 变量对应的值的前 3 个字符?
  k. 请输出 name 变量对应的值的后 2 个字符?
  l. 请输出 name 变量对应的值中 “e” 所在索引位置?

21、字符串是否可迭代?如可以请使用 for 循环每一个元素?

22、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain']

23、写代码,有如下列表,按照要求实现每一个功能

  li = ['alex', 'eric', 'rain']
  a. 计算列表长度并输出
  b. 列表中追加元素 “seven”,并输出添加后的列表
  c. 请在列表的第 1 个位置插入元素 “Tony”,并输出添加后的列表
  d. 请修改列表第 2 个位置的元素为 “Kelly”,并输出修改后的列表
  e. 请删除列表中的元素 “eric”,并输出修改后的列表
  f. 请删除列表中的第 2 个元素,并输出删除的元素的值和删除元素后的列表
g. 请删除列表中的第 3 个元素,并输出删除元素后的列表
  h. 请删除列表中的第 2 至 4 个元素,并输出删除元素后的列表
  i. 请将列表所有的元素反转,并输出反转后的列表

  j. 请使用 for、len、range 输出列表的索引
  k. 请使用 enumrate 输出列表元素和序号(序号从 100 开始)
l. 请使用 for 循环输出列表的所有元素

24、写代码,有如下列表,请按照功能要求实现每一个功能

  li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]

  a. 请输出 “Kelly”
  b. 请使用索引找到 'all' 元素并将其修改为 “ALL”

25、写代码,有如下元组,按照要求实现每一个功能

  tu = ('alex', 'eric', 'rain')
  a. 计算元组长度并输出
  b. 获取元组的第 2 个元素,并输出

  c. 获取元组的第 1-2 个元素,并输出

  d. 请使用 for 输出元组的元素
  e. 请使用 for、len、range 输出元组的索引
  f. 请使用 enumrate 输出元祖元素和序号(序号从 10 开始)

26、有如下变量,请实现要求的功能
  tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])

  a. 讲述元祖的特性
  b. 请问 tu 变量中的第一个元素 “alex” 是否可被修改?
  c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

  d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

27、字典
  dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}

  a. 请循环输出所有的 key

  b. 请循环输出所有的 value

  c. 请循环输出所有的 key 和 value
  d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
  e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典

  f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典
  g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典

28、转换
  a. 将字符串 s = "alex" 转换成列表
  b. 将字符串 s = "alex" 转换成元祖
  c. 将列表 li = ["alex", "seven"] 转换成元组
  d. 将元祖 tu = ('Alex', "seven") 转换成列表
  e. 将列表 li = ["alex", "seven"] 转换成字典且字典的 key 按照 10 开始向后递增

29、转码

  n = "老男孩"
  a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出

  b. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出

30、求 1-100 内的所有数的和

31、元素分类
  有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。

  即: {'k1': 大于 66 的所有值, 'k2': 小于 66 的所有值}

32、购物车
功能要求:

  要求用户输入总资产,例如:2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。

  goods = [
        {"name": "电脑", "price": 1999},

        {"name": "鼠标", "price": 10},

        {"name": "游艇", "price": 20},

        {"name": "美女", "price": 998},

      ]

 
 
 
 
 
  1. # py4测试题
  2. # 1、8 << 2等于?
  3. # 将8转为二进制数0b1000,<<2表示将此二进制左移两位==》0b100000,结果为32
  4.  
  5. # 2、通过内置函数计算5除以2的余数
  6. print(divmod(5,2)[1])
  7. #
  8. # 3、s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"], 将s中的5个字符提取出来并拼接成字符串。
  9. s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: ""}, "o"]
  10. l=[]
  11. for i in s:
  12. if isinstance(i,str):
  13. l.append(i)
  14. result="".join(l)
  15. print(result)
  16. #
  17. # 4、判断
  18. # "yuan"是否在[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"], 如何判断以及对应结果?
  19. if "yuan" in [123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"]:
  20. print(True)
  21. else:
  22. print(False)
  23. #判断结果为:false
  24.  
  25. # 5、
  26. l = [1, 2, 3]
  27. l2 = l.insert(3, "hello")
  28. print(l2)
  29. # 执行结果并解释为什么?
  30. # 答:执行结果为None,l.insert(3, "hello")是对列表l进行添加,实际上是通过l的绑定方法insert来执行此函数,而这个函数
  31. # 没有返回值(即无return),所以执行结束后返回值为None。
  32. #
  33. # 6、 a = [1, 2, [3, "hello"], {"egon": "aigan"}]
  34. a = [1, 2, [3, "hello"], {"egon": "aigan"}]
  35. b = a[:]
  36. a[0] = 5
  37. a[2][0] = 666
  38. print(a)
  39. print(b)
  40. print(id(a),id(b))
  41. # 计算结果以及为什么?
  42. # print(a)的执行结果为[5, 2, [666, 'hello'], {'egon': 'aigan'}],print(b)的结果为[1, 2, [666, 'hello'], {'egon': 'aigan'}]
  43. # 这是因为b=a[:]是一个切片操作,在没有设定索引的情况下,就是切所有的赋值给b,这相当于浅拷贝一个b(id(b)不等于id(a)),
  44. # a,b一样的就只是最外层元素的地址引用,而在修改a[0]时,数字修改就相当于重新赋值,因此b依然指向原来的地址,而a改变了,对于a[2][0]
  45. # 的修改,对于列表的地址并没有改变,因此在a和b中都发生了改变
  46.  
  47. # 7.使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
  48. # print(max(open("a"),key=lambda x:len(x)))
  49. #
  50. #
  51. def add(s, x):
  52. return s + x
  53. def generator():
  54. for i in range(4):
  55. yield i
  56. base = generator()
  57. l=[]
  58. for n in [1,11]:
  59. for i in base:
  60. a=add(i,n)
  61. l.append(a)
  62. base=iter(l)
  63. print(list(base))
  64. # 结果为:[22, 23, 24, 25]
  65. # 当n=1的时候,for i in base ,产生的i依次是0,1,2,3,在经过add函数后,base作为一个生成器里面有1,2,3,4
  66. #当n=11的时候,for i in base ,产生的i依次是1,2,3,4,在经过add函数后,base作为一个生成器里面有12,13,14,15
  67.  
  68. #
  69. # hello.py(gbk方式保存):
  70. # #coding:GBK
  71. # print(“老男孩”)
  72. # 如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)
  73. # 都可以打开,因为windows系统为gbk编码,因此显示无问题
  74. # 而mac本默认编码为utf-8,可以打开,但是显示会乱码
  75. #
  76. #
  77. # 通过函数化编程实现5的阶乘
  78. def func(n):
  79. total=1
  80. for i in range(1,n+1):
  81. total*=i
  82. return total
  83. print(func(5))
  84. #
  85. # 打印如下图案:
  86. #
  87. # *
  88. # ***
  89. # *****
  90. # *******
  91. # *****
  92. # ***
  93. # *
  94. for i in range(5):
  95. print("* "*(2*i-1))
  96. for i in range(3,0,-1):
  97. print("* "*(2*i-1))
  98. #
  99. #
  100. def outer():
  101. count = 10
  102. def inner():
  103. global count
  104. count = 20
  105. print(count)
  106. inner()
  107. print(count)
  108. outer()
  109. # (1)分析运行结果?
  110. # (2)如何让两个打印都是20
  111. # 无法运行,因为count没有被定义,在print(count)的时候
  112. # (2)在inner函数中加入global count即可
  113.  
  114. #
  115. # 输入一个年份,判断是否是闰年?
  116. def year(n):
  117. if n%100 ==0 :
  118. if n % 400==0 :
  119. print("%s是闰年"%n)
  120. else:
  121. print("%s不是闰年"%n)
  122. else:
  123. if n%4==0:
  124. print("%s是闰年" % n)
  125. else:
  126. print("%s不是闰年"%n)
  127. n=int(input("请输入年份:"))
  128. year(n)
  129. #
  130. #
  131. # 任意输入三个数,判断大小?
  132. def func(x,y,z):
  133. l=[x,y,z]
  134. m=1
  135. while m<len(l)-1:
  136. for i in range(len(l)-m):
  137. if l[i]>l[i+1]:
  138. mid=l[i]
  139. l[i]=l[i+1]
  140. l[i+1]=mid
  141. m+=1
  142. print(l)
  143. print("%s<%s<%s"%(l[0],l[1],l[2]))
  144. func(12,4,7)
  145. #
  146. #
  147. # 求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222
  148. # ,几个数相加以及a的值由键盘控制。
  149. def func(a,n):
  150. l=[]
  151. for i in range(n):
  152. x=0
  153. while i>=0:
  154. x+=(a*(10**i))
  155. i=i-1
  156. l.append(x)
  157. sum(l)
  158. print(l)
  159. func(2,6)
  160. #
  161. 16
  162. f = open("a")
  163. while 1:
  164. choice = input("是否显示:[Y/N]:")
  165. if choice.upper() == "Y":
  166. for i in f:
  167. print(i)
  168. else:
  169. break
  170. # 请问程序有无bug,怎么解决?
  171. # 有bug,如果打开文件时,是操作系统打开的,默认编码为GBK,如果该文件是utf-8的文件,里面包含文字的话就会出现乱码情况,因此这里应该指定编码格式
  172. # 其次这里是一个while True的死循环,在输入显示Y后,文件句柄f作为一个迭代器,只能只用一次,即使循环,再输入y也是无显示的,因此去掉死循环,或重新获得文件句柄
  173. # 在打印的时候,为了有良好的效果,最好.strip(),去掉前后的空格与换行符
  174.  
  175. #
  176. # (1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。
  177. import time
  178. def log(func):
  179. def wrapper(*args,**kwargs):
  180. res = func(*args,**kwargs)
  181. with open("test","a",encoding="utf8")as f:
  182. f.write("在%s执行了%s"%(time.time(),func))
  183. return res
  184. return wrapper
  185. @log
  186. def foo():
  187. print('hello foo')
  188. return ()
  189. @log
  190. def bar():
  191. print('hello bar')
  192. foo()
  193. # (2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如 @ logger(True)
  194. import time
  195. def logger(flag):
  196. def log(func):
  197. def wrapper(*args,**kwargs):
  198. res = func(*args,**kwargs)
  199. if flag:
  200. with open("test","a",encoding="utf8")as f:
  201. f.write("在%s执行了%s\n"%(time.time(),func))
  202. return res
  203. return wrapper
  204. return log
  205. @logger(True)
  206. def foo():
  207. print('hello foo')
  208. return ()
  209. @logger(False)
  210. def bar():
  211. print('hello bar')
  212. foo()
  213. bar()
  214.  
  215. #
  216. # 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?
  217. with open("user_information",encoding="utf8") as f_usr,\
  218. open("locked",mode="a+",encoding="utf8") as f_locked : #打开用户信息文件和黑名单文件,防止有汉字加上编码
  219. flag=True #设置标志位
  220. count=0 #初始化变量
  221. count_list = [] #创建一个用以放置输入错误账户名的列表
  222. while flag and count<3:
  223. count+=1
  224. user_name = input("please input username:")
  225. f_locked.seek(0) #因locked文件时a+模式,在读取时先将光标调至开头
  226. for line in f_locked: #逐行读取黑名单
  227. if user_name == line.strip(): #判断用户名是否在文件中
  228. print("Sorry!This user has been locked!")
  229. flag=False #更改标志位,以结束最外层循环
  230. break #结束读取黑名单文件操作
  231. if flag: # 不在黑名单时,执行以下操作
  232. f_usr.seek(0) #移动光标位置(此处是为了下次循环继续从头读取信息,而第一次读取,r模式下就是从开头读取)
  233. for line1 in f_usr: #读取用户信息文件
  234. user_information = line1.strip().split("---")#将每行的用户名与密码分割成一个列表
  235. if user_information[0]==user_name: #判断用户名是否与输入的相同,不相同则继续循环
  236. pwd = input("please input pwd:")
  237. if user_information[1]==pwd:
  238. flag=False #匹配成功,修改标志位
  239. print("hello %s,welcome you!"%user_name)
  240. break
  241. else:
  242. print("user_name or pwd wrong!") #否则则报错
  243. count_list.append(user_name) #将此用户加入到计数列表中
  244. count1=count_list.count(user_name) #计算此用户已输入错误几次
  245. if count1 == 3: # 判断本次输入的用户错误次数是否到达3次
  246. f_locked.write("\n" + user_name) # 到达,则加入locked文件
  247. break
  248. else:
  249. print("User name doesn't exist!") #在逐行读取完毕,正常结束的情况下,表示无此用户名

  1. # py4测试题
  2. # 1、8 << 2等于?
  3.  
  4. #8转化成二进制:1000
  5. #向左移动2位: 0010 0000
  6. #转化成十进制:32
  7.  
  8. # 2、通过内置函数计算5除以2的余数
  9.  
  10. #a=divmod(5,2)
  11. #余数:
  12. # a[1] --->1
  13. #
  14.  
  15. # 3、s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"], 将s中的5个字符提取出来并拼接成字符串。
  16. #
  17. s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: ""}, "o"]
  18. a=[]
  19. for i in s:
  20. if isinstance(i,str):
  21. a.append(i)
  22. b="".join(a)
  23. print(b)
  24.  
  25. # 4、判断
  26. # "yuan" 是否在[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"], 如何判断以及对应结果?
  27. #
  28. #判断"yuan"是不是列表的元素:
  29. a=[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"]
  30. if "yuan" in a:
  31. print("yuan in the list")
  32.  
  33. # 5、l = [1, 2, 3]
  34. # l2 = l.insert(3, "hello")
  35. # print(l2)
  36. # 执行结果并解释为什么?
  37. #
  38. #结果是none。因为l.insert 是给l插入值,没有返回值。
  39. #
  40. # 6、
  41. a = [1, 2, [3, "hello"], {"egon": "aigan"}]
  42. b = a[:]
  43. a[0] = 5
  44. a[2][0] = 666
  45.  
  46. print(a)
  47. print(b)
  48. # # 计算结果以及为什么?
  49. #
  50. # a:[5,2,[666,"hello"],{"egon":"aigan"}]
  51. #
  52. # b:[1,2,[666,"hello"],{"egon":"aigan"}]
  53. # 原因:这种拷贝方法。不可变类型的,原对象更改不会影响到拷贝对象,而可变类型的,原对象更改会影响到拷贝对象,
  54. # 拿列表来说,实际存储的是指向列表的内存地址。而列表里的元素只和列表有关系。
  55.  
  56. #
  57. # 使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
  58. with open("a") as f:
  59. print(max((len(i.strip()) for i in f)))
  60. #
  61. def add(s, x):
  62. return s + x
  63.  
  64. def generator():
  65. for i in range(4):
  66. yield i
  67.  
  68. base = generator()
  69. for n in [1, 11]:
  70. base = (add(i, n) for i in base)
  71.  
  72. print(list(base)
  73.  
  74. #输出结果:[22,23,24,25]
  75. #原因:生成器有定义阶段和调用阶段,定义阶段只会定义,而不会运行,当调用这个生成器的时候才会执行。
  76. #base = [0,1,2,3]
  77. #base1 = (add(i, n) for i in [0,1,2,3])
  78. #base2 = (add(i, n) for i in base1)
  79. #
  80. #最后执行base2,会依次从上往下执行,可到base1,n已经在for运行完变成了11,所以base1 = [11,12,13,14]
  81. #
  82. #再执行base2 = [22,23,24,25]
  83. #
  84. #
  85. # hello.py(gbk方式保存):
  86. # #coding:GBK
  87. print(“老男孩”)
  88. #
  89. # 如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)
  90. #
  91. #不会出错。
  92. #
  93. #
  94. # 10、通过函数化编程实现5的阶乘
  95. def foo(n):
  96. sum=1*n
  97. a = 1
  98. while a < n:
  99. sum *= a
  100. a += 1
  101. print(sum)
  102. foo(5)
  103. #
  104. # 结果:120
  105. #
  106. #
  107. # 11、 打印如下图案:
  108. #
  109. # *
  110. # * * *
  111. # ** * **
  112. # ** ** * **
  113. # ** * **
  114. # * * *
  115. # *
  116.  
  117. for i in range(1,8,2):
  118. a="*"*i
  119. print(a.center(10))
  120. for i in range(5,0,-2):
  121. a="*"*i
  122. print(a.center(10))
  123.  
  124. #
  125. def outer():
  126. count = 10
  127. def inner():
  128. count = 20
  129. print(count)
  130. inner()
  131. print(count)
  132. outer()
  133. #
  134. #(1)分析运行结果?
  135. #(2)如何让两个打印都是20
  136. #(1):先输出20,再输出10
  137.  
  138. #(2):在inner()下加入nonlocal count,最后结果都是20了。
  139. def inner():
  140. nonlocal count
  141. count = 20
  142. print(count)
  143.  
  144. # 13、 输入一个年份,判断是否是闰年?
  145. a = int(input("请输入年份: "))
  146. if a%4 ==0:
  147. if a%40 == 0:
  148. print("该年份是闰年!")
  149. else:
  150. print("该年份不是闰年!")
  151. else:
  152. print("该年份不是闰年!")
  153. #
  154. #
  155. # 14、 任意输入三个数,判断大小?
  156.  
  157. def com(a,b,c):
  158. max = a
  159. min = a
  160. l=[a,b,c]
  161. for i in l :
  162. if i >= max:
  163. max = i
  164. else:
  165. min = i
  166. print("The max is %s " % max)
  167. print("The min is %s " % min)
  168. a=int(input("Please input the first number: ")) #
  169. b=int(input("Please input the second number: ")) #
  170. c=int(input("Please input the third number: ")) #
  171. com(a,b,c)
  172.  
  173. # 输出结果:
  174. # The max is 9
  175. # The min is 2
  176. #
  177. # 求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222
  178. # ,几个数相加以及a的值由键盘控制。
  179. from functools import reduce
  180. def foo(a,n):
  181. l=[]
  182. while n>0:
  183. l.append(int(a*n))
  184. n -= 1
  185. sum=reduce(lambda x,y:x+y ,l)
  186. print(sum)
  187. a=input("Please input a's value: ") #
  188. n=int(input("Please a's counts :")) #
  189. foo(a,n)
  190.  
  191. #输出结果:
  192. #246 2+22+222
  193. #
  194. f = open("a")
  195.  
  196. while 1:
  197. choice = input("是否显示:[Y/N]:")
  198. if choice.upper() == "Y":
  199. for i in f:
  200. print(i)
  201. else:
  202. break
  203. #
  204. # 请问程序有无bug,怎么解决?
  205. #1、如果输入Y。输出文件内容。但每行都多一个换行符。再次输入Y则不会显示。
  206. #2、输入的不是Y也不是N,程序都会终止。
  207.  
  208. #如果想要循环输出,则:
  209. f = open("a")
  210.  
  211. while 1:
  212. choice = input("是否显示:[Y/N]:")
  213. if choice.upper() == "Y":
  214. for i in f:
  215. print(i.strip())
  216. f.seek(0)
  217. elif choice.upper()=="N":
  218. break
  219. else:
  220. print("请输入正确的命令!")
  221. #
  222. def foo():
  223. print('hello foo')
  224. return ()
  225. def bar():
  226. print('hello bar')
  227. #
  228. # (1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。
  229. # (2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如 @ logger(True)
  230.  
  231. # 1、
  232. import datetime
  233. def logger(fun):
  234. def wor():
  235. with open("%s"%fun.__doc__,"a") as f:
  236. fun()
  237. a=str(datetime.datetime.now())
  238. f.write(a+"\n")
  239. return wor
  240. @logger
  241. def foo():
  242. "foo"
  243. print('hello foo')
  244. return ()
  245. @logger
  246. def bar():
  247. "bar"
  248. print('hello bar')
  249.  
  250. foo() #生成foo文件,记录时间
  251. bar() #生成bar文件,记录时间
  252.  
  253. #2、
  254. import datetime
  255. def logger(bool):
  256. def logger1(fun):
  257. def wor():
  258. if bool:
  259. with open("%s"%fun.__doc__,"a") as f:
  260. fun()
  261. a=str(datetime.datetime.now())
  262. f.write(a+"\n")
  263. return wor
  264. return logger1
  265. @logger(True)
  266. def foo():
  267. "foo"
  268. print('hello foo')
  269. return ()
  270. @logger(False)
  271. def bar():
  272. "bar"
  273. print('hello bar')
  274.  
  275. foo() #生成foo文件,记录时间
  276. bar() #不会生成bar文件
  277.  
  278. # 18、三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?
  279. used={} #可用用户名
  280. error={} #用户名:输入错误次数(默认0)
  281.  
  282. with open("used.txt") as f:
  283. for l in f.readlines():
  284. l=l.split()
  285. used[l[0]]=l[1]
  286.  
  287. for i in used:
  288. error[i]=0
  289.  
  290. flag=True
  291. flag1=True
  292.  
  293. #先判断用户输入错误次数是否有达到3次的,有直接锁定用户并退出。
  294. #判断输入的用户是否在已锁定的用户中,有的话提示该用户已锁定。
  295. #输入的用户名和密码匹配正确,提示欢迎词。
  296. #输入的用户不存在提示重新输入。用户名正确,密码错误,error中对应用户的输入错误次数自加1,并提示重新输入!
  297.  
  298. while flag:
  299. print(error)
  300. for i in error:
  301. if error[i] == 3:
  302. print("The name is disabled!")
  303. with open("black", "a") as f:
  304. f.write(i + "\n")
  305. flag = False
  306. flag1= False
  307. break
  308. if flag1:
  309. name = input("Please input your name : ")
  310. passwd = input("Please input your password : ")
  311. with open("black") as f:
  312. for i in f.readlines():
  313. if name in i.strip():
  314. print("The name is disabled!")
  315. flag1=False
  316. break
  317. if flag1:
  318. if name in used:
  319. if passwd == used[name]:
  320. print("Welcome %s !" % name)
  321. break
  322. else:
  323. print("Please input again !")
  324. error[name]+=1
  325. else:
  326. print("Please input agin !")
  327. flag1=True
 三次登录:
  1. def shujuku():
  2. with open("账号密码",mode='r',encoding='utf8') as f:
  3. lines = f.readlines()
  4. for i in lines:
  5. zm = i.strip()
  6. z,m = zm.split(":",2)[0],zm.split(":",2)[1]
  7. return z,m
  8. def heimingdan():
  9. with open('黑名单',mode='r',encoding='utf8') as f:
  10. lines = f.readlines()
  11. for i in lines:
  12. z1 = i.strip()
  13. return z1
  14. def suoding(userh):
  15. with open('黑名单', mode='a+', encoding='utf8') as f:
  16. f.write(userh)
  17. count = 0
  18. while True:
  19. user = input('账号:').strip()
  20. pwd = input('密码:').strip()
  21. z1 = heimingdan()
  22. if user == z1:
  23. print('该账号处于锁定状态,请联系管理员!')
  24. break
  25. z,m = shujuku()
  26. if user != z:
  27. print('用户名或密码错误,请重新输入!!')
  28. continue
  29. elif pwd != m:
  30. print('用户名或密码错误,请重新输入!!')
  31. count += 1
  32. if count == 3:
  33. print('该账号错误次数过多,已被锁定,请联系管理员解锁!!')
  34. suoding(user)
  35. break
  36. else:
  37. continue
  38. else:
  39. print('欢迎登录!!')
  40. break
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Python之基础练习题的更多相关文章

  1. Python一些基础练习题

    可变的数据类型:list, dict, set(可修改其中的元素) 不可变的数据类型:str, tuple 重点:str, list, dict (1).推导式练习 # 利用列表推导式: 找出100以 ...

  2. python ----字符串基础练习题30道

    1.执行python脚本的两种方式 一种是点开始--运行--cmd 方式(这个操作需要先配置好环境变量path路径)之后运行python 二是直接进安装目录 运行tython软件运行.pycharm ...

  3. 【Python】基础练习题-1

    #练习1:从键盘输入两个数,并比较其大小,直到输入e/E退出程序 while 1: input_number=raw_inut("please input two numbers,enter ...

  4. 【python语法基础-经典练习题】python语法基础练习题01---商场打折

    # 1.一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣(打九折),# 如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格,再显示出折扣(%1 ...

  5. Linux基础练习题(二)

    Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...

  6. Python文件基础

    ===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...

  7. 3.Python编程语言基础技术框架

    3.Python编程语言基础技术框架 3.1查看数据项数据类型 type(name) 3.2查看数据项数据id id(name) 3.3对象引用 备注Python将所有数据存为内存对象 Python中 ...

  8. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  9. 小白必看Python视频基础教程

    Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.Python的火热,也带动了工程师们的就业热.可能你也想通过学习加入这个炙手可热的行业,可以看看Python视频基础教程,小 ...

随机推荐

  1. (拓展欧几里得)51NOD 1256 乘法逆元

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的.   输入 输入2个数M, N中间用空 ...

  2. 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减 直至765398并保持此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动 ,当数码管上数减到停止时,实验板上流水灯出停止然后全部开始闪烁,3秒后(用 T0定时)流水灯全部关闭,数码管上显示出“HELLO”,到此保持住

    #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigne ...

  3. Java中关键字continue、break和return的区别

    Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break:   跳出循环体,继续执行循环外的函数体 return:   跳出整个函数 ...

  4. 456 132 Pattern 132模式

    给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计一个算法,当 ...

  5. 转】Cassandra单集群实验2个节点

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/3/ 感谢! Cassandra单集群实验2个节点 前言 A ...

  6. php微信自动发红包

    <?phpheader('Content-type:text');define("TOKEN", "weixin");$wechatObj = new w ...

  7. 关于min-height:100%的解决办法

    前几天碰到一个问题,在用bs和jq2.2.0开发时,min-height设为100%在firefox和ie下没有起作用,先用css改了一下,但是min-height虽然是奏效了,但同时出现了其他css ...

  8. SSM Note

    1.获取项目的绝对路径:${pageContext.request.contextPath } 2.销毁session:session.invalidate(); 3.控制器接收前端参数时,参数名要与 ...

  9. actuator服务实战

    1. actuator服务实战 1.1. 前言 actuator默认集成了很多端点查看,这里我会挑选也用到可能性大些的 1.2. Endpoints 1.2.1. 使用方式 开启服务后,直接访问:lo ...

  10. 老式浏览器支持html5和css3

    在IE页面的head标签里面加入   <!-[if IE]> <script src="http://html5shiv.googlecode.com/svn/trunk/ ...