2010-11-12 3 views
-2

J'ai besoin de quelques conseils sur la façon d'écrire un programme Python où il vous donne une liste des n premiers carrés parfaits en format liste. La sortie devrait ressembler à ceci:Compter et générer des carrés parfaits

 
How many squares?: 5 
[1, 4, 9, 16, 25] 

C'est ce que j'ai jusqu'à présent:

n = int(raw_input("How many squares? ")) 

Maintenant, pour la partie suivante, je dois créer une liste des premières places de n. Des suggestions sur comment? Merci pour votre temps et vos conseils.

+3

@justin: Il y a deux parties à problème. Connaître l'algorithme et l'implémenter en python. Fournissez l'algorithme et ensuite vous pouvez être guidé sur la façon de l'implémenter avec python – pyfunc

+116

Merci à tous ceux qui ont aidé Justin dans son travail universitaire: vos solutions sont ses solutions. Justin a été surveillé par le personnel du cours depuis un certain temps et se réunira sous peu avec le doyen pour discuter de sa future carrière universitaire. –

Répondre

10

Utilisez une compréhension de la liste:

[ a*a for a in xrange(1, n + 1) ] 
0

Ou sur la carte et une fonction lambda

n = int(raw_input("How many squares? ")) 
map(lambda x: x*x, range(n)) 

si vous le souhaitez à partir de 1

map(lambda x: x*x, range(1, n+1)) 
+0

pouvez-vous expliquer quelle carte et lambda fait? –

+0

@justin: ces choses sont généralement découragées. Pas besoin de l'apprendre, et c'est un mauvais style de l'écrire. http://www.artima.com/weblogs/viewpost.jsp?thread=98196 – bukzor

4

maintenant pour la prochaine partie j'ai besoin de commencer à créer une liste des n premiers carrés. Des suggestions sur comment? Merci pour votre temps et vos conseils.

Ceci est quelque chose que vous pouvez aider. Pour l'autre partie, publiez votre algorithme.

Utilisez plage pour générer une liste:

>>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Utilisez la compréhension de la liste pour obtenir la liste des x^2

>>> [x**2 for x in range(10)] 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
>>> 

Une réponse plus élégante est fournie par Novikov

2
n = int(raw_input("How many squares? ")) 
map((2).__rpow__, range(1, n+1)) 

ou

from operator import mul 
n = int(raw_input("How many squares? ")) 
map(mul, *[range(1, n+1)]*2) 
1

Quelqu'un a mentionné générateurs - c'est la façon dont vous les utilisez dans ce cas:

def sq(n): 
    i=0 
    while i<n: 
     i+=1 
     yield i*i 

if __name__=="__main__": 
    n = int(raw_input("How many squares? ")) 
    print list(sq(n)) 
0

Code:

list_squares=[] 
for a in xrange(1, n+1): 
list_squares.append(a*a) 
print list_squares 

où n est entrée utilisateur pour le nombre de places qu'il veut.

Si n=5 alors la sortie ressemble à:

 
[1, 4, 9, 16, 25]