请稍候,加载中....

Python语法二级(四)

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

 


Python学习手册-