## Python 100 题 - Day07 # Question 20

### Question:

Define a class with a generator which can iterate the numbers, which are divisible by 7, between a given range 0 and n.

Suppose the following input is supplied to the program:

``````7
``````

Then, the output should be:

``````0
7
14
``````

### Hints:

Consider use class, function and comprehension.

Main author's Solution: Python 2

#### The solution code for this problem was not as reltive to as the problem mentioned and there was a typing mistake while calling the function.

Solution: Python 3

``````'''Solution by: ShalomPrinz
'''
class MyGen():
def by_seven(self, n):
for i in range(0, int(n/7) + 1):
yield i * 7

for i in MyGen().by_seven( int(input('Please enter a number... ')) ):
print(i)
``````

``````'''Solution by: Seawolf159
'''
class Divisible:

def by_seven(self, n):
for number in range(1,n + 1):
if number % 7 == 0: yield number

divisible = Divisible()
generator = divisible.by_seven(int(input("Please insert a number. --> ")))
for number in generator:
print(number)
``````

# Question 21

### Question:

A robot moves in a plane starting from the original point (0,0). The robot can move toward UP, DOWN, LEFT and RIGHT with a given steps. The trace of robot movement is shown as the following:

``````UP 5
DOWN 3
LEFT 3
RIGHT 2
``````

The numbers after the direction are steps. Please write a program to compute the distance from current position after a sequence of movement and original point. If the distance is a float, then just print the nearest integer.
Example:
If the following tuples are given as input to the program:

``````UP 5
DOWN 3
LEFT 3
RIGHT 2
``````

Then, the output of the program should be:

``````2
``````

### Hints:

In case of input data being supplied to the question, it should be assumed to be a console input.Here distance indicates to euclidean distance.Import math module to use sqrt function.

Main author's Solution: Python 2

``````import math
pos = [0,0]
while True:
s = raw_input()
if not s:
break
movement = s.split(" ")
direction = movement
steps = int(movement)
if direction=="UP":
pos+=steps
elif direction=="DOWN":
pos-=steps
elif direction=="LEFT":
pos-=steps
elif direction=="RIGHT":
pos+=steps
else:
pass

print int(round(math.sqrt(pos**2+pos**2)))
``````

My Solution: Python 3

``````import  math

x,y = 0,0
while True:
s = input().split()
if not s:
break
if s=='UP':                  # s indicates command
x-=int(s)                # s indicates unit of move
if s=='DOWN':
x+=int(s)
if s=='LEFT':
y-=int(s)
if s=='RIGHT':
y+=int(s)
# N**P means N^P
dist = round(math.sqrt(x**2 + y**2))  # euclidean distance = square root of (x^2+y^2) and rounding it to nearest integer
print(dist)
``````

``````'''Solution by: pratikb0501
'''

from math import sqrt
lst = []
position = [0,0]
while True:
a = input()
if not a:
break
lst.append(a)
for i in lst:
if 'UP' in i:
position -= int(i.strip('UP '))
if 'DOWN' in i:
position += int(i.strip('DOWN '))
if 'LEFT' in i:
position -= int(i.strip('LEFT '))
if 'RIGHT' in i:
position += int(i.strip('RIGHT '))
print(round(sqrt(position ** 2 + position ** 2)))
``````

go to previous day

go to next day 评论
0 评论 