2016-11-05 4 views
1

х-ось увеличивается на + 100 есть способ сократить код, используя цикл с помощью Python 3цикла для сокращения кода

def peasInAPod(): 
    win=GraphWin(100,500) 
    peas=eval(input("how many peas? ")) 
    if peas == 5: 
     p=Circle(Point(50,100),50) 
     p2=Circle(Point(150,100),50) 
     p3=Circle(Point(250, 100),50) 
     p4=Circle(Point(350,100),50) 
     p5=Circle(Point(450,100),50) 
     p.draw(win) 
     p2.draw(win) 
     p3.draw(win) 
     p4.draw(win) 
     p5.draw(win) 
+1

Никогда не используйте eval: [using-pythons-eval-vs-ast-literal-eval] (http://stackoverflow.com/q/15197673/5644961), [eval_really_is_dangerous] (http://nedbatchelder.com/ блог/201206/eval_really_is_dangerous.html). В этом случае используйте 'int (input (...))' – Copperfield

+0

Было бы супер-потрясающе, если бы вы могли указать, был ли какой-либо из ответов ниже (не обязательно мой, конечно) решил вашу проблему :) – Eugene

ответ

0

EDIT

Вы просили кратчайшим, верно?

def peasInAPod(): 
    win = GraphWin(100,500) 
    list(map(lambda p: p.draw(win), [Circle(Point((i*100)+50,100),50) for i in range(int(input('How many peas? ')))])) 

Вам нужен list на самом деле выполнить lambda.

Оригинальный ответ:

Что-то вроде этого?

def peasInAPod(): 
    win = GraphWin(100,500) 
    peas = eval(input('How many peas? ')) # Use something safer than eval 
    for i in range(peas): 
     p = Circle(Point((i*100)+50,100),50) 
     p.draw(win) 

Я предполагаю, что вам не нужно повторно использовать p* переменные в другом месте, и что вам не нужно хранить или ссылаться позже список гороха (это только привлекает их). Чем больше вы предоставляете, тем лучше ответ вы получите! Надеюсь это поможет.

Просто для удовольствия, вот генератор! К сожалению, я не мог с этим поделать ...

def the_pod(how_many): 
    for p in range(how_many): 
     yield Circle(Point((p*100)+50,100),50) 

def peasInAPod(): 
    win = GraphWin(100,500) 
    of_all_the_peas = input('How many peas? ') # raw_input for Python < 3 
    for one_of_the_peas in the_pod(int(of_all_the_peas)): 
     one_of_the_peas.draw(win) 

Это копирует, вставляет и выполняет без каких-либо зависимостей. На всякий случай, когда вы закончите бесконечный генератор, который заставляет людей иметь бесконечный горошек.

def the_pod(): 
    p = 0 
    while True: 
     yield (p*100)+50 
     p += 1 

def peasInAPod(): 
    print('You may have all the peas. Well. Only their x-coordinate.') 
    for one_of_the_peas in the_pod(): 
     print(one_of_the_peas) 

peasInAPod() 

Я ухожу, чтобы получить гороховый суп. Благодаря!

1

Я предполагаю, что вы ищете что-то вдоль линий:

def peasInAPod(): 
    win=GraphWin(100,500) 
    peas=eval(input("how many peas? ")) 
    list_of_peas = [Circle(Point(50 + i * 100, 100),50) for i in range(0,peas)] 
    for p in list_of_peas: 
     p.draw(win) 

EDIT список понимание также может быть изменен на:

list_of_peas = [Circle(Point(i, 100),50) for i in range(50,peas*100,100)] 
+0

вы можете получить правильное 'i' с соответствующим диапазоном, избегайте дополнительного арифметического шага – Copperfield

+0

@Copperfield да, спасибо. Добавил его как альтернативную версию в редакторе. – UnholySheep

0

Да, используя список понимание:

def peasInAPod(): 
    win=GraphWin(100,500) 
    peas=eval(input("how many peas? ")) 
    if peas == 5: 
     [Circle(Point(i, 100), 50).draw(win) 
     for i in range(50, 550, 100)] 
+0

Зачем вам здесь пользоваться списком? Вы не пытаетесь создать список. – DSM

+0

@ DSM: Он работает и короче. –

+2

Это не короче, чем просто делать для i в диапазоне (прочее): Circle (other_stuff) .draw (win) 'непосредственно, и он строит и выбрасывает промежуточный список без причины. – DSM