1. 构建一个生成器,该⽣成器可以在给定范围0和n之间迭代可以被7整除的数字。
示例代码:
def create_numbers(n):
for i in range(n + 1):
if i % 7 == 0:
yield i
for i in create_numbers(10):
print(i)
讲解:
生成器通过yield
返回函数执行结果,与return
不同,yield
返回后,函数会继续执行
2. 机器⼈从原始点(0,0)开始在平⾯中移动。
机器⼈可以按照给定的步骤向上,下,左和右移动。 机器⼈运动的轨迹如下所示:
上5 下3 左3 右2
⽅向后的数字为步⻓。
请编写⼀个程序,以计算⼀系列移动和原始点之后与当前位置的距离。 如果距离是浮点数,则只需打印最接近的整数。
例:
依次输⼊:"UP 5", "DOWN 3", "LEFT 3", "RIGHT 2"
则程序应输出:
2 (距离原点2个步长)
代码示例:
import math
pos = {"x":0,"y":0}
while True:
s = input("请输入移动步数:")
if not s:
break
movement = s.split(" ")
direction = movement[0]
steps = int(movement[1])
if direction == "UP":
pos["x"] += steps
elif direction=="DOWN":
pos["x"] -= steps
elif direction=="LEFT":
pos["y"] -= steps
elif direction=="RIGHT":
pos["y"] += steps
else:
print("机器人移动了:",int(round(math.sqrt(pos["x"]**2 + pos["y"]**2))))
讲解:
这个练习题主要练习二维结构数据使用,对于平面坐标,每一个位置都由x,y构成,可以用字典来表示位置{"x","y"},如果使用列表[x,y]
,pos[0]
,pos[1]
不如pos["x"]
,pos["y"]
语义清晰
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
代码示例:
freq = {}
line = input()
for word in line.split():
freq[word] = freq.get(word,0)+1
keys = sorted(freq)
for k in keys:
print "%s:%d" % (k,freq[k])
讲解:
这里巧妙的利用来字典的
get
默认值方法,这样当单词第一次出现的时候,从0开始累加.sorted
可以对列表,字典等可迭代对象进行排序,返回排序键,字典默认按照键名排序,返回排序的键, 如果按照键值排序,可以res = sorted(freq.items(), key=lambda x:x[1])
4. 定义⼀个函数,该函数可以接收两个字符串形式的整数并计算它们的和,并在控制台中将其打印出来
错误示例:
def printValue(s1,s2):
print(int(s1)+int(s2))
正确示例:
def printValue(s1,s2):
try:
print(int(s1)+int(s2))
except Exception:
print("输入错误")
讲解:
错误示例主要是缺少对类型的判断,只有符合特定条件的字符串才可以转换为int类型,所以需要进行判定,或者进行异常处理
5. 定义⼀个函数,该函数可以接受两个字符串作为输⼊,并在控制台中打印最⼤⻓度的字符串。 如果两个字符串的⻓ 度相同,则该函数应逐⾏打印所有字符串
示例代码:
def printValue(s1,s2):
s1_len = len(s1)
s2_len = len(s2)
if s1_len > s2_len:
print(s1)
elif s2_len > s1_len:
print(s2)
else:
print(s1, "\n", s2)
printValue("one","three")
讨论区