#如下代码输出什么内容?
a = 2
a = 4
a = 6
print(a + a + a)
答案:18
解释:
python读取和执行代码是从上往下的
变量a被更新了3次最后的值是6,所以a+a+a会是18
# 如下代码会报什么错误?
a = 1
_a = 2
_a2 = 3
2a = 4
答案:第4行会报错,因为变量的名字,不能以数字开头
解释:变量名字可以用字母或者下划线开头,不能是其他
# 如下代码会报什么错误?
a = 1
b = 2
print(a == b)
print(b == c)
答案:会报错说,变量c没有被定义
解释:变量需要先被声明定义,才能被使用
#修改如下代码,让它的输出是数字1+2结果为3。要求:不要修改前两行,只修改第3行
a = "1"
b = 2
print(a + b)
a = "1"
b = 2
print(int(a) + b)
解释:
# 如下代码想要判断字符串中的字母是不是等于e,等于的话输出这个字母
# 但是报错了,为什么?怎么修复?
for letter in "Hello":
if letter == "e":
print(letter)
for letter in "Hello":
if letter == "e":
print(letter)
e
解释:
print(type("Hey".replace("ey","i")[-1])
print(type("Hey".replace("ey","i")[-1]))
解释:
pass = input("Please enter your password: ")
print(pass)
pass1 = input("Please enter your password: ")
print(pass1)
Please enter your password: ts123654
ts123654
解释:
print(math.sqrt(9))
import math
print(math.sqrt(9))
解释
# 完成如下代码,输出序列的第二个元素"b"
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[1])
b
解释:
H E L L O
0 1 2 3 4
# 完成如下代码,输出子序列,包含元素d、e、f
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[3:6])
['d', 'e', 'f']
解释:
# 完成如下代码,输出前三个元素的子序列,包含元素a、b、c
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[:3])
['a', 'b', 'c']
解释:
# 完成如下代码,使用负数索引,输出字母i
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[-2])
i
解释:
H E L L O
0 1 2 3 4
-5-4-3-2-1
# 完成如下代码,获得一个切片,得到最后的3个元素[h, i, j]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[-3:])
['h', 'i', 'j']
解释:
# 完成如下代码,获得一个切片,包含元素['a', 'c', 'e', 'g', 'i']
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
print(letters[::2])
['a', 'c', 'e', 'g', 'i']
解释:
[start:end:step]
# 编写代码,生成如下数字List,注意要用函数生成,别手动生成
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
my_range = range(1, 21)
print(list(my_range))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
解释:
# 完成如下代码
my_range = range(1, 21)
# 你的代码需要使用my_range变量最终产生如下输出:
# [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
my_range = range(1, 21)
print([x * 10 for x in my_range])
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
解释:
# 完成如下代码
my_range = range(1, 21)
# 你的代码需要使用my_range变量最终产生如下输出:
# ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
my_range = range(1, 21)
print([str(x) for x in my_range])
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
解释:
# 完成代码,移除列表中的重复值,最终产生如下输出:a = ["1", 1, 2]
a = ["1", 1, "1", 2]
# 答案1:
a = ["1", 1, "1", 2]
a = list(set(a))
print(a)
['1', 1, 2]
解释:
# 答案2:
a = ["1", 1, "1", 2]
b = []
for i in a:
if i not in b:
b.append(i)
print(b)
['1', 1, 2]
解释:
# 完成代码,对列表排序,得到排序后的结果
lista = [20, 40, 30, 50, 10]
# 最终产生如下输出:lista is [50, 40, 30, 20, 10]
lista = [20, 40, 30, 50, 10]
lista.sort(reverse=True)
print("lista is", lista)
lista is [50, 40, 30, 20, 10]
解释:
# 编写代码,创建一个字典:字典的Key是字母a和b, 字典的value分别是1和2
# 答案1:这是简单的大括号的语法
d = {"a": 1, "b": 2}
print(d)
{'a': 1, 'b': 2}
# 答案2: dict是一个函数,可以用key=value的方式进行,这时候key为a和b不用写成字符串形式
d = dict(a = 1, b = 2)
print(d)
{'a': 1, 'b': 2}
# 完成如下代码,最终输出数值2
d = {"a": 1, "b": 2}
d = {"a": 1, "b": 2}
print(d["b"])
2
解释:
# 完成如下代码,计算key为a和b的值value的加和,最终输出数值3
d = {"a": 1, "b": 2, "c": 3}
d = {"a": 1, "b": 2, "c": 3}
print(d["b"] + d["a"])
3
解释:
# 如下会报什么错误?为什么会报这个错误?
# 如果想得到"男"该怎么修正呢?
d = {"姓名": "小明", "性别": "男"}
print(d["男"])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
in ()
2 # 如果想得到"男"该怎么修正呢?
3 d = {"姓名": "小明", "性别": "男"}
----> 4 print(d["男"])
KeyError: '男'
d["性别"]
'男'
会有如下报错信息:KeyError: ‘男’
答案:
解释:
# 给如下代码新增一对key:value,key是c,value是3最终输出为:{'a': 1, 'c': 3, 'b': 2}
d = {"a": 1, "b": 2}
d = {"a": 1, "b": 2}
d["c"] = 3
print(d)
{'a': 1, 'b': 2, 'c': 3}
解释:
# 计算如下字典的所有value的数字的和,最终输出结果6
d = {"a": 1, "b": 2, "c": 3}
d = {"a": 1, "b": 2, "c": 3}
print(sum(d.values()))
6
解释:
# 移除如下字典中所有value大于1的key:value对,过滤后,输出{'a': 1}
d = {"a": 1, "b": 2, "c": 3}
d = {"a": 1, "b": 2, "c": 3}
d = {key: value for key, value in d.items() if value <= 1}
print(d)
{'a': 1}
解释:
'''
创建一个字典:key是a、b、c,value分别是列表1~10、列表11~20、列表21~30
格式化输出字典,最终产生如下整齐的输出:
{'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'b': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
'c': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]}
'''
from pprint import pprint
d = {"a": list(range(1, 11)),
"b": list(range(11, 21)),
"c": list(range(21, 31))}
pprint(d)
{'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'b': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
'c': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]}
解释:
# 对于如下字典dict,怎样访问key=b的列表的第3个元素,输出数字13
d = {"a": list(range(1, 11)),
"b": list(range(11, 21)),
"c": list(range(21, 31))}
d = {"a": list(range(1, 11)),
"b": list(range(11, 21)),
"c": list(range(21, 31))}
print(d["b"][2])
13
解释:
"""
遍历如下字典dict,得到以下三行输出:
a has value [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b has value [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
c has value [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
"""
d = {"a": list(range(1, 11)),
"b": list(range(11, 21)),
"c": list(range(21, 31))}
d = {"a": list(range(1, 11)),
"b": list(range(11, 21)),
"c": list(range(21, 31))}
for key, value in d.items():
print(key, "has value", value)
a has value [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b has value [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
c has value [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
解释:
# 打印字母a到z,每行一个字母
import string
for letter in string.ascii_lowercase:
print(letter)
解释:
# 编写代码,打印从1到10,每个数字一行
for i in range(1, 11):
print(i)
解释:
# 编写代码,计算从1到100的和,包含1和100,即:1+2+3+4+.....+99+100
sum_value = 0
for i in range(1, 100 + 1):
sum_value += i
print(sum_value)
5050
解释:
"""
编写代码,计算从1到100中偶数的数字和
即:2+4+6+8+.....+98+100
输出结果:2550
"""
sum_value = 0
for i in range(1, 100 + 1):
if i % 2 == 1:
continue
sum_value += i
print(sum_value)
2550
解释:
"""根据a产生如下输出:
Item 1 has index 0
Item 2 has index 1
Item 3 has index 2
"""
a = [1, 2, 3]
a = [1, 2, 3]
for index, item in enumerate(a):
print(f"Item {item} has index {index}")
Item 1 has index 0
Item 2 has index 1
Item 3 has index 2
解释:
"""
编写代码根据a,b经过处理产出如下内容,其中5=1+4、7=2+5、9=3+6:
5
7
9
"""
a = [1, 2, 3]
b = (4, 5, 6)
a = [1, 2, 3]
b = (4, 5, 6)
for i, j in zip(a, b):
print(i + j)
5
7
9
提示:
'''
创建函数,计算加速度,初始和结束的速度为v1和v2,初始和结束的时间为t1和t2
a=(v2-v1)/(t2-t1),
然后,将参数(v1, v2, t1, t2)分别取值为(0, 10, 0, 20),调用函数,得到结果为:0.5
'''
def acceleration(v1, v2, t1, t2):
a = (v2 - v1) / (t2 - t1)
return a
print(acceleration(0, 10, 0, 20))
0.5
解释:
# 如下代码会报错,为什么?怎么修复错误?
def foo(a, b):
print(a + b)
x = foo(2, 3) * 10
答案:
解决办法:
把print改成return,可以让函数返回一个具体的值
def foo(a, b):
return a + b
x = foo(2, 3) * 10
print(x)
50
# 如下代码为了输出数字的cosine值,但是报错了说方法cosine不存在,该怎么修正?
import math
print(math.cosine(1))
import math
print(dir(math))
print(help(math.cos))
print(math.cos(1))
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Help on built-in function cos in module math:
cos(...)
cos(x)
Return the cosine of x (measured in radians).
None
0.5403023058681398
解释:
# 如下代码报错,为什么,怎么修正它?
import math
print(math.pow(2))
import math
print(math.pow(2, 3))
8.0
解释:
# 如下代码会报错,为什么?怎么修复?
def foo(a=1, b=2):
return a + b
x = foo - 1
代码会报错:
TypeError: unsupported operand type(s) for -: ‘function’ and ‘int’ 原因:x = foo - 1,这里的foo是一个函数对象,函数对象和int数字是没法相减的报错
修复方式:要调用一个函数,得在函数名后面加上括号,本题目中是foo()
def foo(a=1, b=2):
return a + b
x = foo() - 1
print(x)
'''
编写函数,计算球的体积V=(4/3)*pi*r^3
要求函数的参数半径r,有一个默认值10
然后用r=2为参数,调用函数得到结果
'''
import math
def volume(r=10):
return (4 * math.pi * r ** 3) / 3
print(volume())
print(volume(2))
解释:
# 如下代码会报错,为什么?怎么修复?
def foo(a=2, b):
return a + b
报错信息:SyntaxError: non-default argument follows default argument
解释:
def foo(b, a=2):
return a + b
print(foo(3))
print(foo(3, 4))
# 如下代码会输出什么内容?为什么呢?
c = 1
def foo():
return c
c = 3
print(foo())
解释:
c = 1
def foo():
return c
c = 3
print(foo())
# 如下代码会输出什么内容?为什么呢?
c = 1
def foo():
c = 2
return c
c = 3
print(foo())
2
解释:
# 如下代码的最后一行,会报错说NameError: name 'c' is not defined
# 怎样修复代码,让代码不报错,并且输出数值1?
def foo():
c = 1
return c
foo()
print(c)
def foo():
global c
c = 1
return c
foo()
print(c)
1
解释:
# 如下代码会报错,为什么?怎么修复?
age = input("What's your age? ")
age_last_year = age - 1
print("Last year you were %s." % age_last_year)
age = input("What's your age? ")
age_last_year = int(age) - 1
print("Last year you were %s." % age_last_year)
What's your age? 20
Last year you were 19.
解释:
# 如下代码让用户输入name和age,然后拼接字符串
# 但是代码会报错 TypeError,为什么?怎么修复?有另一种办法吗?
name = input("Enter name: ")
age = input("Enter age: ")
print("Your name is %s and your age is %s" % name, age)
name = input("Enter name: ")
age = input("Enter age: ")
print("Your name is %s and your age is %s" % (name, age))
print(f"Your name is {name} and your age is {age}")
解释:
# 创建一个函数,以任何一个英文字符串作为入参数,返回英文单词的数目
def count_words(string):
string_list = string.split()
return len(string_list)
print(count_words("You are a good student !"))
6
解释:
"""
编写函数,传入.txt文件路径作为参数,统计文件中英文单词的数目
输入:新建一个txt文件,名字为p049.txt,粘贴如下内容到文件里,作为参数文件:
Living without an aim is like sailing without a compass.
"""
def count_words(filepath):
with open(filepath, 'r') as file:
string = file.read()
string_list = string.split(" ")
return len(string_list)
print(count_words("p049.txt"))#注意路径
解释:
"""
编写函数,传入.txt文件路径作为参数,统计文件中英文单词的数目
注意,不只是空格分割,也可能是逗号分隔
输入:新建一个txt文件,名字为p050.txt,粘贴如下内容到文件里,作为参数文件:
A tree is a woody perennial plant,typically with branches.
"""
import re
def count_words(filepath):
with open(filepath, 'r') as file:
string = file.read()
string_list = re.split(r",| ", string)
print(string_list)
return len(string_list)
print(count_words("p050.txt"))
解释:
# 编写代码,生成一个文件p051.txt,每一行是一个英文字母,从a~z
import string
with open("p051.txt", "w") as file:
for letter in string.ascii_lowercase:
file.write(letter + "\n")
解释:
'''编写代码,生成文件p052.txt,每一行是两个英文字母的组合:
ab
cd
ef
...
yz
'''
import string
with open("p052.txt", "w") as f:
for i, j in zip(string.ascii_lowercase[::2], string.ascii_lowercase[1::2]):
f.write(i + j + "\n")
提示:
'''编写代码,生成文件p053.txt,每一行是三个英文字母的组合:
abc
def
ghi
jkl
mno
pqr
stu
vwx
yz '''
import string
letters = string.ascii_lowercase + " "
slice1 = letters[0::3]
slice2 = letters[1::3]
slice3 = letters[2::3]
with open("p053.txt", "w") as file:
for s1, s2, s3 in zip(slice1, slice2, slice3):
file.write(s1 + s2 + s3 + "\n")
解释:
'''
编写代码,
1、在当前目录下新建一个目录,名字为 p054
2、给26个英文字母在p054目录下生成一个文件,文件名分别是a.txt、b.txt ~~ z.txt,文件内容分别是字母a、b~~z
'''
import os
import string
if not os.path.exists("p054"):
os.makedirs("p054")
for letter in string.ascii_lowercase:
with open(f"p054/{letter}.txt", "w") as f:
f.write(letter)
解释:
'''
编写代码,
1、扫描p054文件夹,里面是a.txt/b.txt~z.txt共26个文件,每个文件的都是对应字母a~z
2、读取每个文件的内容,最终产出一个list,是字母a~z
'''
import glob
letters = []
file_list = glob.glob("p054/*.txt")
for file in file_list:
with open(file) as f:
letters.append(f.read().strip())
print(letters)
解释:
'''编写代码,
1、扫描p054文件夹,里面是a.txt/b.txt~z.txt共26个文件,每个文件的都是对应字母a~z
2、如果文件里的内容字母,属于字符串"python"中的字母,则存入结果列表
3、打印结果列表'''
import glob
letters = []
file_list = glob.glob("p054/*.txt")
check = "python"
for file in file_list:
with open(file) as f:
letter = f.read().strip()
if letter in check:
letters.append(letter)
print(letters)
解释:
'''如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问employees的第二个人,得到他的lastName,即 Smith '''
d = {"employees": [{"firstName": "John", "lastName": "Doe"},
{"firstName": "Anna", "lastName": "Smith"},
{"firstName": "Peter", "lastName": "Jones"}],
"owners": [{"firstName": "Jack", "lastName": "Petter"},
{"firstName": "Jessy", "lastName": "Petter"}]}
print(d['employees'][1]['lastName'])
解释:
'''如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么访问 employees 的第二个人,修改他的 lastName 将值从 Smith 改成 Smooth'''
d = {"employees": [{"firstName": "John", "lastName": "Doe"},
{"firstName": "Anna", "lastName": "Smith"},
{"firstName": "Peter", "lastName": "Jones"}],
"owners": [{"firstName": "Jack", "lastName": "Petter"},
{"firstName": "Jessy", "lastName": "Petter"}]}
d['employees'][1]['lastName'] = "Smooth"
解释:
'''
如下是一个多级字典,也就是说每个字典的KEY的VALUE,也是个数据结构
怎么给 employees 添加一个人:'firstName': 'Albert', 'lastName':'Bert'
'''
d = {"employees": [{"firstName": "John", "lastName": "Doe"},
{"firstName": "Anna", "lastName": "Smith"},
{"firstName": "Peter", "lastName": "Jones"}],
"owners": [{"firstName": "Jack", "lastName": "Petter"},
{"firstName": "Jessy", "lastName": "Petter"}]}
d["employees"].append({'firstName': 'Albert', 'lastName': 'Bert'})
解释:
# 把如下字典,变成JSON格式,存入一个文件 p060.json
{'employees': [{'firstName': 'John', 'lastName': 'Doe'},
{'firstName': 'Anna', 'lastName': 'Smith'},
{'firstName': 'Peter', 'lastName': 'Jones'}],
'owners': [{'firstName': 'Jack', 'lastName': 'Petter'},
{'firstName': 'Jessy', 'lastName': 'Petter'}]}
import json
d = {"employees": [{"firstName": "John", "lastName": "Doe"},
{"firstName": "Anna", "lastName": "Smith"},
{"firstName": "Peter", "lastName": "Jones"}],
"owners": [{"firstName": "Jack", "lastName": "Petter"},
{"firstName": "Jessy", "lastName": "Petter"}]}
with open("p060.json", "w") as f:
f.write(json.dumps(d, indent=2))
解释:
# 用python加载p60.json文件,转成字典,并且进行格式化输出
import json
import pprint
with open("p060.json") as f:
d = json.loads(f.read())
pprint.pprint(d)
{'employees': [{'firstName': 'John', 'lastName': 'Doe'},
{'firstName': 'Anna', 'lastName': 'Smith'},
{'firstName': 'Peter', 'lastName': 'Jones'}],
'owners': [{'firstName': 'Jack', 'lastName': 'Petter'},
{'firstName': 'Jessy', 'lastName': 'Petter'}]}
解释:
'''完成如下步骤:
1.用python加载p060.json文件,转成字典
2.给 employees 添加一个人:
'firstName': 'Albert', 'lastName': 'Bert'
3.将数据生成json,结果存到 p062.json文件'''
import json
with open("p060.json") as f:
d = json.loads(f.read())
d["employees"].append({'firstName': 'Albert', 'lastName': 'Bert'})
with open("p062.json", "w") as f:
f.write(json.dumps(d, indent=2))
解释:
'''实现python代码,无限循环,一直打印字符串 hello
输出如下内容,注意是无限输出:
hello
hello
hello
hello
hello
hello
hello
...
'''
while True:
print("hello")
while 1 < 2:
print("hello")
解释:
# 实现python代码,每两秒钟输出hello字符串,无限继续:
import time
while True:
print("Hello")
time.sleep(2)
解释:
# 实现python代码,输出hello,停顿1秒;输出hello,停顿2秒;输出hello,停顿3秒,...按此一直持续:
import time
i = 0
while True:
i = i + 1
print("Hello")
time.sleep(i)
解释:
# 实现python代码,输出hello,停顿1秒;输出hello,停顿2秒;输出hello,停顿3秒;
# 打印4次hello,然后退出循环:
import time
i = 0
while True:
i = i + 1
print("Hello")
if i > 3:
print("End of loop")
break
time.sleep(i)
解释:
# 如下代码只能输出一个Hello,只修改break这行代码,让程序交替输出Hello、Hi、Hello、Hi,持续不断
while True:
print("Hello")
if 2 > 1:
break
print("Hi")
# while True:
# print("Hello")
# if 2 > 1:
# pass
# print("Hi")
解释:
# 如下代码只能输出一个Hello,只修改break这行代码,让程序持续输出Hello、Hello、Hello,持续不断
while True:
print("Hello")
if 2 > 1:
break
print("Hi")
while True:
print("Hello")
if 2 > 1:
continue
print("Hi")
解释:
'''
完成如下程序,让用户可以输入一个英文单词,程序给出中文翻译结果。实现效果:
Enter word: apple
苹果
'''
d = {"apple": "苹果", "orange": "桔子", "banana": "香蕉"}
d = {"apple": "苹果", "orange": "桔子", "banana": "香蕉"}
def translate(word):
return d[word]
word = input("Enter word: ")
print(translate(word))
解释:
'''
如下程序实现功能,让用户可以输入一个英文单词,程序给出中文翻译结果。
按以下要求修改程序:如果输入的英文单词不在字典中,输出信息“单词不在词典中”
限制:请使用try catch的异常机制完成本题目,效果如下:
Enter word: hello
单词不在词典中
'''
d = {"apple": "苹果", "orange": "桔子", "banana": "香蕉"}
def translate(word):
return d[word]
word = input("Enter word: ")
print(translate(word))
d = {"apple": "苹果", "orange": "桔子", "banana": "香蕉"}
def translate(word):
try:
return d[word]
except KeyError:
return "单词不在词典中"
word = input("Enter word: ")
print(translate(word))
解释:
"""
如下是英汉翻译词典文件,用python加载词典文件
当用户输入英语单词时,返回中文文字
增加:程序应该处理大小写情况,例如输入Apple也能返回apple的翻译
自己新建 p071.txt 粘贴内容如下:
apple,苹果
orange,桔子
banana,香蕉
pear,梨
peach,桃
grape,葡萄
lemon,柠檬
效果:
Enter word: Apple
苹果
"""
engdict = {}
with open("p071.txt", encoding="utf8") as f:
for line in f:
eng, ch = line.strip().split(",")
engdict[eng] = ch
def translate(word):
try:
return engdict[word]
except KeyError:
return "单词不在词典中"
word = input("Enter word: ").lower()
print(translate(word))
解释:
"""
编写Python代码,输出当前的日期时间
形如:2023-06-09 20:20:27
提示:使用datetime模块
"""
from datetime import datetime
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
2023-06-09 13:48:27
解释:
"""编写Python代码,用户可以输入年龄数字,程序打印生日年份
请输入年龄:20
你的出生年份是:2003
提示:datetime.now().year可以得到当前时间的年份"""
from datetime import datetime
age = int(input("请输入年龄:"))
year_birth = datetime.now().year - age
print(f"你的出生年份是:{year_birth}")
请输入年龄:22
你的出生年份是:2001
提示:
"""编写Python代码,用户可以输入生日,程序打印活了多少天
请输入生日:2002-6-9
7665天 #执行代码的日期变化结果会跟着发生改变
提示:
datetime.datetime.strptime("2022-05-14", "%Y-%m-%d"),可以将字符串转换成日期对象
日期对象可以直接相减,差值对象可以得到天数"""
import datetime
birthday = input("请输入生日:")
birthday_date = datetime.datetime.strptime(birthday, "%Y-%m-%d")
curr_datetime = datetime.datetime.now()
minus_datetime = curr_datetime - birthday_date
print(minus_datetime.days, "天")
请输入生日:2000-06-09
8400 天
提示:
"""
编写代码,输出今天、昨天、明天、一周前的日期
可以编写个函数实现
如果今天是2023-06-09,输出形如:
2023-06-09 2023-06-10 2023-06-08 2023-06-02
提示:
datetime.datetime.now()得到当前日期对象
datetime.timedelta(days=days)可以得到一个时间间隔对象
日期对象和间隔对象的加法和减法,得到结果对象
"""
import datetime
def diff_days(days):
pdate_obj = datetime.datetime.now()
time_gap = datetime.timedelta(days=days)
pdate_result = pdate_obj - time_gap
return pdate_result.strftime("%Y-%m-%d")
print(diff_days(0), diff_days(1), diff_days(-1), diff_days(7))
提示:
'''
编写代码,输入开始日期,结束日期,返回中间的所有日期
例如,输入:begin_date = "2022-06-02",end_date = "2022-06-09"
打印如下内容:
['2022-06-02','2022-06-03','2022-06-04','2022-06-05','2022-06-06','2022-06-07','2022-06-08','2022-06-09']
'''
import datetime
def get_date_range(begin_date, end_date):
date_list = []
while begin_date <= end_date:
date_list.append(begin_date)
begin_date_object = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
days1_timedelta = datetime.timedelta(days=1)
begin_date = (begin_date_object + days1_timedelta).strftime("%Y-%m-%d")
return date_list
begin_date = "2023-06-02"
end_date = "2023-06-09"
date_list = get_date_range(begin_date, end_date)
print(date_list)
['2023-06-02', '2023-06-03', '2023-06-04', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09']
'''
写Python代码,要求用户输入用户名,进行检测:
1、用户名至少6位;
2、文件名不能在文件p077_users.txt中存在
自己新建文件:p077_users.txt,粘贴如下内容进去:
xiaoming
xiaowang
xiaozhang
xiaozhao
xiaoqian
xiaosun
结果演示:
请输入用户名: pss
长度小于6位,请重新输入
请输入用户名: xiaoming
用户名已存在,请重新输入
请输入用户名: abcdefg
用户名检测通过
'''
while True:
username = input("请输入用户名:")
with open("p077_users.txt") as f:
users = [name.strip() for name in f.readlines()]
if len(username) < 6:
print("长度小于6位,请重新输入")
continue
if username in users:
print("用户名已存在,请重新输入")
continue
else:
print("用户名检测通过")
break
解释:
"""
编写Python代码,用户输入密码位数,给出一个随机密码生成
请输入密码位数:20
@X_>;HrLM9f?0Elg+q{o
提示:
python自带的string模块,提供多种字符集合,小写字母:string.ascii_lowercase;大写字母:string.ascii_uppercase;数字:string.digits;标点符号:string.punctuation
random是随机数模块,random.sample可以从序列中随机得到几个字符的列表
"""
import string
import random
words = string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation
len = int(input("请输入密码位数:"))
chosen = random.sample(words, len)
password = "".join(chosen)
print(password)
请输入密码位数:8
@Y5QH-[U
提示:
"""编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
实现效果如下,如果不满足条件会一直循环:
请输入密码: abcdefg
密码校验不通过,请重新输入
请输入密码: abc12
密码校验不通过,请重新输入
请输入密码: abcAA2
密码校验通过"""
while True:
pwd = input("请输入密码: ")
have_number = any([i.isdigit() for i in pwd])
have_upper = any([i.isupper() for i in pwd])
if have_number and have_upper and len(pwd) >= 6:
print("密码校验通过")
break
else:
print("密码校验不通过,请重新输入")
解释:
"""
编写Python代码,需要用户一直输入密码,直到满足如下条件才退出循环:
至少包含一个数字;
至少包含一个大写字母;
密码至少6位数;
实现效果如下,如果不满足条件会一直循环,注意会给出多个不满足的信息:
请输入密码: abcdefg
密码不通过,有如下原因:
*需要至少一位数字
*需要至少一位大写字母
请输入密码: abc12
密码不通过,有如下原因:
*需要至少一位大写字母
*需要至少6位密码
请输入密码: abcAA2
密码校验通过
"""
while True:
msgs = []
psw = input("请输入密码: ")
if not any([i.isdigit() for i in psw]):
msgs.append("需要至少一位数字")
if not any([i.isupper() for i in psw]):
msgs.append("需要至少一位大写字母")
if len(psw) < 6:
msgs.append("需要至少6位密码")
if len(msgs) == 0:
print("密码检测通过")
break
else:
print("密码不通过,有如下原因: ")
for note in msgs:
print("*", note)
解释:
"""新建文件p081.txt,将如下内容粘贴到文件中
编写代码,给每个数字乘以2,结果输出到p081_output.txt
x,y
3,5
4,9
6,10
7,11
8,12"""
with open("p081.txt") as fin, open("p081_output.txt", "w") as fout:
for line in fin:
if "x,y" in line:
fout.write(line)
else:
x, y = line.strip().split(",")
x = int(x) * 2
y = int(y) * 2
fout.write(f"{x},{y}\n")
解释:
"""
输入一个成绩文件,计算成绩的最大值最小值平均值
文件名:p082.txt,自己复制如下内容进去即可:
学号,姓名,分数
101,小张,88
102,小王,77
103,小李,99
104,小赵,66
105,小强,55
"""
def compute_score():
scores = []
with open("./p082.txt") as f:
for line in f:
line = line.strip()
fields = line.split(",")
scores.append(int(fields[-1]))
max_score = max(scores)
min_score = min(scores)
avg_score = round(sum(scores) / len(scores), 2)
return max_score, min_score, avg_score
max_score, min_score, avg_score = compute_score()
print(max_score, min_score, avg_score)
解释:
"""
用python编写代码,把这两个txt纵向拼接在一个文件,存入p083.txt
自己粘贴文件:p083_xiaomei.txt
小美 看韩剧
小美 跳舞
小美 逛街
小美 看综艺
自己粘贴文件:p083_xiaohua.txt
小花 看电影
小花 逛街
小花 购物
小花 跳舞
小花 看小说
"""
with open("p083.txt", "w", encoding='utf8') as fout:
for fname in ["p083_xiaomei.txt", "p083_xiaohua.txt"]:
with open(fname, encoding='utf8') as f:
for line in f:
fout.write(line)
解释:
"""用python编写代码,计算两个人的爱好的交集
自己粘贴文件:p083_xiaomei.txt
小美 看韩剧
小美 跳舞
小美 逛街
小美 看综艺
自己粘贴文件:p083_xiaohua.txt
小花 看电影
小花 逛街
小花 购物
小花 跳舞
小花 看小说
输出:
逛街
跳舞
提示:set集合,有方法叫做 intersection,可以直接计算交集"""
def get_aihao(fname):
aihao = []
with open(fname, encoding='utf8') as f:
for line in f:
aihao.append(line.split()[1])
return aihao
xiaomei = get_aihao("p084_xiaomei.txt")
xiaohua = get_aihao("p084_xiaohua.txt")
for i in set(xiaomei).intersection(set(xiaohua)):
print(i)
解释:
"""
输入一个(姓名,爱好)文件,计算每个爱好的人数
文件名:p085.txt,自己复制如下内容进去即可,姓名和爱好之间是一个空格分割的:
小张 篮球,羽毛球
小王 篮球,乒乓球
小李 篮球,台球
小赵 篮球,足球,台球
小马 乒乓球,台球
小钱 羽毛球,足球
小孙 乒乓球,台球
小强 羽毛球
输出如下内容:
篮球 4
羽毛球 3
乒乓球 3
台球 4
足球 2
"""
like_count = {}
with open("p085.txt", encoding='utf8') as fin:
for line in fin:
line = line[:-1]
sname, likes = line.split(" ")
like_list = likes.split(",")
for like in like_list:
if like not in like_count:
like_count[like] = 0
like_count[like] += 1
for key, value in like_count.items():
print(key, value)
解释:
"""
有两个文件:
文件1:成绩文件,列为(学号、成绩)
文件2:学生信息文件,列为(学号,姓名)
关联两个文件,得到(学号、姓名、成绩),结果存入 p086.txt
自己新建文件粘贴内容:
p086_grade.txt
101,90
102,88
103,89
104,95
自己新建文件粘贴内容:
p086_student.txt
101,小明
102,小王
103,小张
104,小李
得到结果:
p086.txt
101,小明,90
102,小王,88
103,小张,89
104,小李,95
"""
grade_dict = {}
with open("p086_grade.txt", encoding="utf8") as f:
for line in f:
sno, grade = line.strip().split(",")
grade_dict[sno] = grade
fout = open("p086.txt", "w", encoding="utf8")
with open("p086_student.txt", encoding="utf8") as f:
for line in f:
sno, sname = line.strip().split(",")
grade = grade_dict[sno]
fout.write(f"{sno},{sname},{grade}\n")
fout.close()
解释:
"""
编写函数date_is_right,判断日期是不是 YYYY-MM-DD 的格式
如果是返回True,否则返回False
测试结果形如:
2023-06-09 True
202-06-09 False
2026/06-09 False
20230609 False
20a30609 False
"""
import re
def date_is_right(date):
return re.match(r"\d{4}-\d{2}-\d{2}", date) is not None
print("2023-06-09", date_is_right("2023-06-09"))
print("202-06-09", date_is_right("202-06-09"))
print("2023/06-09", date_is_right("2023/06-09"))
print("20230609", date_is_right("20230609"))
print("20a30609", date_is_right("20a30609"))
解释:
如下文字中,有很多电话号码,用python提取打印出来
白日依19989881888山尽,黄河入45645546468798978海流。
欲穷12345千里目,更上15619292345一层楼。
输出内容:
19989881888
15619292345
提示:
电话号码的规则是:都是数字1开头,并且包含11位数字
re.findall方法,可以搜索文本中的所有匹配的模式
import re
content = """ 白日依19989881888山尽,黄河入45645546468798978海流。
欲穷12345千里目,更上15619292345一层楼。
"""
pattern = r"1\d{10}"
results = re.findall(pattern, content)
for result in results:
print(result)
解释:
"""
如下文字中,有很多邮箱地址,用python提取打印出来
寻隐者[email protected]不遇
朝代:唐asdf12dsa#abc.com代
作[email protected]者:贾岛
松下问童子,言师python-abc@163com采药去。
只在[email protected]此山中,云深不知处。
输出内容:
[email protected]
[email protected]
[email protected]
提示:
邮箱地址的模式位:多位字母/数字/下划线/中划线 @ 多位字母数字 . 2~4位字母
"""
import re
content = """ 寻隐者[email protected]不遇
朝代:唐asdf12dsa#abc.com代
作[email protected]者:贾岛
松下问童子,言师python-abc@163com采药去。
只在[email protected]此山中,云深不知处。
"""
pattern = re.compile(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}")
results = pattern.findall(content)
for result in results:
print(result)
解释:
"""
如下文字中,有很多不允许使用的词语,包含 最好、最低、绝对
用python将这三个词语,都替换成***字符串
输入内容:
这个商品很好,质量最好、用起来很不错,并且价格最低,绝对的物美价廉
输出内容:
这个商品很好,质量***、用起来很不错,并且价格***,***的物美价廉
提示:
re.sub可以实现正则替换字符串
r"最好|最低|绝对"就可以同时匹配很多个字符串
"""
import re
content = """ 这个商品很好,质量最好、用起来很不错,并且价格最低,绝对的物美价廉
"""
pattern = r"最好|最低|绝对"
print(re.sub(pattern, "***", content))
这个商品很好,质量***、用起来很不错,并且价格***,***的物美价廉
解释:
"""
如下文字中,有一些手机号数字
用python将所有的手机号,只保留开始和结尾数字,中间用******代替
输入内容:
白日依19989881888山尽,黄河入45645546468798978海流。
欲穷12345千里目,更上15619292345一层楼。
输出内容:
白日依19******88山尽,黄河入45645546468798978海流。
欲穷12345千里目,更上15******45一层楼。
提示:
手机号总共11位数字,总是数字1开头
在正则里可以加括号,代表分组,在re.sub时可以用\1、\2代表第几个分组
"""
import re
content = """ 白日依19989881888山尽,黄河入45645546468798978海流。
欲穷12345千里目,更上15619292345一层楼。
"""
pattern = r"(1\d)\d{7}(\d{2})"
print(re.sub(pattern, r"\1******\2", content))
解释:
"""
提供一个目录路径,用python扫描所有的文件,列出文件路径
例如:
dir = r"D:\workbench\python-exercises-100p"
输出内容:
D:\workbench\python-exercises-100p\.gitignore
D:\workbench\python-exercises-100p\LICENSE
D:\workbench\python-exercises-100p\Python练习100题课件.pptx
D:\workbench\python-exercises-100p\ceshi01.py 1
D:\workbench\python-exercises-100p\p001.py 5
D:\workbench\python-exercises-100p\p002.py 4
D:\workbench\python-exercises-100p\p003.py 4
D:\workbench\python-exercises-100p\p004.py 3
D:\workbench\python-exercises-100p\p005.py 3
等等
提示:
os.walk可以递归扫描目录
根据自己电脑的实际情况自定义一个路径,并输出对应路径的的文件
"""
import os
dir = r"D:\workbench\python-exercises-100p"
for root, dirs, files in os.walk(dir):
for file in files:
fpath = os.path.join(root, file)
print(fpath)
解释:
"""
提供一个目录路径,用python找出所有的.py文件
展示文件路径,以及文件的行数
输入内容:
dir = r"D:\workbench\python-exercises-100p"
输出内容:
D:\workbench\python-exercises-100p\ceshi01.py 1
D:\workbench\python-exercises-100p\p001.py 5
D:\workbench\python-exercises-100p\p002.py 4
D:\workbench\python-exercises-100p\p003.py 4
D:\workbench\python-exercises-100p\p004.py 3
D:\workbench\python-exercises-100p\p005.py 3
提示:
os.walk可以递归扫描目录,判断如果是.py文件,则读取文件计算行数
使用file.endswith(".py")可以判断是不是.py文件
len(f.readlines())可以统计文件行数
"""
import os
dir = r"D:\workbench\python-exercises-100p"
for root, dirs, files in os.walk(dir):
for file in files:
if file.endswith(".py"):
fpath = os.path.join(root, file)
with open(fpath, encoding="utf8") as f:
print(fpath, len(f.readlines()))
解释:
"""
自己新建一个目录 arrange_dir
自己在文件夹下,手动新建多个“假文件”:
aaa.txt bbb.mp3 ccc.avi ccc.jpg ddd.jpg eee.txt fff.mp3 ggg.jpg hhh.txt iii.mp3
编写代码,按后缀名将文件移动到 arrange_dir 下的多个子目录(txt、mp3、avi、jpg),如下效果所示
arrange_dir
txt
aaa.txt
eee.txt
hhh.txt
mp3
bbb.mp3
fff.mp3
iii.mp3
avi
ccc.avi
jpg
ccc.jpg
ddd.jpg
ggg,jpg
提示:
os.listdir可以列出当前目录下的所有文件
os.path.splitext可以得到文件后缀名,例如.txt、.mp3
os.mkdir可以创建目录
shutil.move可以移动文件
"""
import os
import shutil
dir = "./arrange_dir"
for file in os.listdir(dir):
ext = os.path.splitext(file)[1]
ext = ext[1:]
if not os.path.isdir(f"{dir}/{ext}"):
os.mkdir(f"{dir}/{ext}")
source_path = f"{dir}/{file}"
target_path = f"{dir}/{ext}/{file}"
shutil.move(source_path, target_path)
解释:
'''
提供任何一个目录地址,用python实现文件夹的压缩,压缩成zip格式
例如:dir = r"D:\workbench\python-exercises-100p"
则会生成一个文件 r"D:\workbench\python-exercises-100p.zip"
这个压缩文件是对这个目录的压缩结果
提示:
python自带的zipfile模块可以实现压缩
有些文件以~$字符串开头,是临时文件,需要忽略掉
'''
import os
import zipfile
def do_zip_compress(dirpath):
output_name = f"{dirpath}.zip"
parent_name = os.path.dirname(dirpath)
zip = zipfile.ZipFile(output_name, "w", zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(dirpath):
for file in files:
if str(file).startswith("~$"):
continue
filepath = os.path.join(root, file)
writepath = os.path.relpath(filepath, parent_name)
zip.write(filepath, writepath)
zip.close()
dirpath = r"D:\workbench\python-exercises-100p"
do_zip_compress(dirpath)
解释:
"""
请自己创建一个空文件,文件名是requests.py,请注意文件名不要写错了,然后粘贴如下代码到文件中:
import requests
r = requests.get("https://www.baidu.com/")
print(r.text[:100])
执行代码会报错,module 'requests' has no attribute 'get'
想办法修正
"""
答案:代码文件名不能是requests.py,改成其他名字即可
解释:
"""
用Python访问URL:http://antpython.net/static/py100/life_is_great.txt
然后打印文件中的如下内容:
Life Is Great
I am happy.
I have many friends.
I have a large family.
I have four brothers and four
--- 后面内容省略
提示:使用开源的requests模块实现
"""
import requests
r = requests.get("http://antpython.net/static/py100/life_is_great.txt")
print(r.text)
解释:
"""
这个URL是一个图片,用python下载图片,存入到本地p098.jpeg:
https://img2.baidu.com/it/u=16845247,2548960002&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=627
"""
import requests
url = "https://img2.baidu.com/it/u=16845247,2548960002&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=627"
r = requests.get(url)
with open("p098.jpeg", "wb") as f:
f.write(r.content)
解释:
"""
这是一个网页,里面有一个表单可以提交数据
http://antpython.net/webspider/grade_form
使用python提交一条数据,并且在网页上看到效果:
姓名:B0901970_1,语文88,数学99,英语66
提示:
可以用chrome浏览器的f12打开network,查看后台请求
表单提交的Url是:http://antpython.net/webspider/grade_form
提交方法是post,数据格式为 sname: xx,yuwen: 66,shuxue: 77,yingyu: 88
用requests.post提交即可
"""
import requests
url = "http://antpython.net/webspider/grade_form"
datas = {"sname": "B0901970_1", "yuwen": 66, "shuxue": 77, "yingyu": 88}
resp = requests.post(url, data=datas)
print(resp.status_code)
200
解释:
"""
编写代码,让用户输入一个词语,代码自动打开浏览器,在百度搜索关键词,展示结果
例如用户输入python,自动打开这个界面
提示:
百度搜索的URL:https://www.baidu.com/s?wd=python 这个wd=python,可以替换关键词
python有个模块webbrowser,用它的webbrowser.open(url)可以直接浏览器打开一个URL
f-string可以用f"https://www.baidu.com/s?wd={query}"的方式拼接字符串
"""
import webbrowser
query = input("请输入搜索词: ")
webbrowser.open(f"https://www.baidu.com/s?wd={query}")
提示: