From: Ast Jay on 28 Jan 2010 15:47 I didn't see a beginners forum - hope it's ok to post this here. I feel so daft as this must be the simplest question you've probably been asked! Anyway I'm new to Ruby and want to create a very simple script that generates 100 random words and puts them into an array. I want to put them into an array so I can use array.uniq! so there are no duplicates. Here's my code so far (although I have tried lots of variations already). ---------------- def create_word first_letter = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"].shuffle[0..6].join end def create_list(word) words = [] words << word end 100.times do list << create_list(create_word) puts list end -------- Like I said I am a beginner... well that's my excuse lol. Hope someone can help! -- Posted via http://www.ruby-forum.com/.
From: Stefano Crocco on 28 Jan 2010 16:01 On Thursday 28 January 2010, Ast Jay wrote: > |I didn't see a beginners forum - hope it's ok to post this here. > | > |I feel so daft as this must be the simplest question you've probably > |been asked! > | > |Anyway I'm new to Ruby and want to create a very simple script that > |generates 100 random words and puts them into an array. I want to put > |them into an array so I can use array.uniq! so there are no duplicates. > | > |Here's my code so far (although I have tried lots of variations > |already). > | > |---------------- > |def create_word > | first_letter = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", > |"p", "q", "r", "s", "t", "v", "w", "x", "y", "z"].shuffle[0..6].join > |end > | > |def create_list(word) > | words = [] > | words << word > |end > | > |100.times do > | list << create_list(create_word) > | puts list > |end > | > |-------- > | > |Like I said I am a beginner... well that's my excuse lol. > | > |Hope someone can help! First of all it would be better, when asking for help, to tell exactly what the problem is (for example, including the error message you obtain or explaining why the result your code produces is not what you expected). This way, you make things easier for people wanting to help you. As for your code. The error is in the line list << create_list(create_word) The problem is that something called list has never been defined before, so ruby doesn't know what to do with it. What you wanted is list = create_list(create_word) This creates a local variable called list and stores inside it the value that the create_list method returns. I hope this helps Stefano
From: Aldric Giacomoni on 28 Jan 2010 16:01 Ast Jay wrote: > I didn't see a beginners forum - hope it's ok to post this here. > > I feel so daft as this must be the simplest question you've probably > been asked! > > Anyway I'm new to Ruby and want to create a very simple script that > generates 100 random words and puts them into an array. I want to put > them into an array so I can use array.uniq! so there are no duplicates. > Hi and welcome to Ruby and its community! Your code looks good so far. >def create_word > first_letter = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", > "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"].shuffle[0..6].join > end You don't need to create "first_letter". Ruby returns the last expression evaluated -- so when you run that line, it returns a string of seven characters. > def create_list(word) > words = [] > words << word > end Clever! There is however something even CLEVERER! def create_list word # note the parenthesis are optional! [word] end As you can see, there's no need for a method just to do that. > 100.times do > list << create_list(create_word) > puts list > end A "Set" is an array that doesn't accept duplicates. So you can do this: require 'set' list = Set.new 100.times { list << create_word } or... list = [] 100.times { list << create_word } list.uniq! Make sense? -- Posted via http://www.ruby-forum.com/.
From: Steve Klabnik on 28 Jan 2010 16:02 [Note: parts of this message were removed to make it a legal post.] Here's your problem: def create_list(word) words = [] words << word end Every time you call create_list, you make a new list. If I were going to write your code, I'd do it like this: words = [] 100.times { words << ("a".."z").to_a.shuffle[0..6].join } words.uniq! Make sense?
From: Josh Cheek on 28 Jan 2010 16:04 [Note: parts of this message were removed to make it a legal post.] On Thu, Jan 28, 2010 at 2:47 PM, Ast Jay <azzzz(a)gmx.net> wrote: > I didn't see a beginners forum - hope it's ok to post this here. > > I feel so daft as this must be the simplest question you've probably > been asked! > > Anyway I'm new to Ruby and want to create a very simple script that > generates 100 random words and puts them into an array. I want to put > them into an array so I can use array.uniq! so there are no duplicates. > > Here's my code so far (although I have tried lots of variations > already). > > ---------------- > def create_word > first_letter = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", > "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"].shuffle[0..6].join > end > > def create_list(word) > words = [] > words << word > end > > 100.times do > list << create_list(create_word) > puts list > end > > -------- > > Like I said I am a beginner... well that's my excuse lol. > > Hope someone can help! > -- > Posted via http://www.ruby-forum.com/. > > Don't be so hard on yourself :) I'm not completely certain what you were wanting to happen, this works for me, and seems to behave in pretty much the same way your looked like it wanted to behave. def create_word Array('b'..'z').shuffle[0..6].join end list = Array.new 100.times { list << create_word } puts list
|
Next
|
Last
Pages: 1 2 Prev: gsub not working to replace a 'Chinese' Charater. Next: GServer and SSL |