Re: [Tutor] Trivia

2011-06-30 Thread Christopher King
Just some programming philosophy.

On Fri, Jun 24, 2011 at 3:58 AM, Vincent Balmori
wrote:

>
> "Your whole approach is very fragile in this respect, it only
> takes one small mistake in the data to wreck your program,.
> Somethjing like a config file format would be much more
> robust (and readable) the config reader module would make
> sure you got what you expected back. "
>
> Can you please explain more on what you mean by this?
>
>
> Alan Gauld wrote:
> >
> >
> > "Vincent Balmori"  wrote
> >
> >> It's working fine now with the scoring, but now at the end of the
> >> program
> >> for some reason I get this error message:
> >>
> >
> "/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
> >> line 27, in next_block
> >>point = int(next_line(the_file))
> >> ValueError: invalid literal for int() with base 10: ''
> >
> > Thats because after the last question you try to read another
> > block and don't check anywhere whether you actually read
> > anything. Your next_block code just assumes there will
> > always be valid data there, but at the end of the file there
> > won't be. You get away with category being blank
> > because replace() doesn't complain. But int() does.
> >
> > Your whole approach is very fragile in this respect, it only
> > takes one small mistake in the data to wreck your program,.
> > Somethjing like a config file format would be much more
> > robust (and readable) the config reader module would make
> > sure you got what you expected back.
> >
> > HTH,
> >
> >
> > --
> > Alan Gauld
> > Author of the Learn to Program web site
> > http://www.alan-g.me.uk/
> >
> >
> > ___
> > Tutor maillist  -  Tutor@python.org
> > To unsubscribe or change subscription options:
> > http://mail.python.org/mailman/listinfo/tutor
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/Trivia-tp31917610p31917979.html
> Sent from the Python - tutor mailing list archive at Nabble.com.
>
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-24 Thread Alan Gauld


"Vincent Balmori"  wrote


Can you please explain more on what you mean by this?



"Your whole approach is very fragile in this respect, it only
 takes one small mistake in the data to wreck your program,.


Your program relies on your data being exactly right.
It only takes one missed newline, or one extra newline
or a blank line or an extra question (maybe a cut n paste
error when editing) or whatever to completely mess your
program.


> Somethjing like a config file format would be much more
> robust (and readable) the config reader module would make
> sure you got what you expected back. "


Read the ConfigParser module documentation to see what I mean.
It treats your data like a Windows INI file and you can retrieve
values using section/tag values. So in your case
You could do, in pseudo code:

cp = ConfigParser(filename)
for section in cp.getSections():
question = cp.get(section, "question")
 points = int( cp.getsection,"points") )
 q1 = cp.get(section,"q1")
 q2 = cp.get(section,"q2")
 etc

And you can catch exceptions raised to detect errors.

That way, if a value doesn't exist you  find out about it and
the parser handles all the navigation of the file.

You could also use an XML format (or JSON or) but
Config Parser would be adequate for your needs.

The data file would also be easier to read because
the tags would make it clear:

[Section Title]
tag=value

Becomes, for example:

[On the Run With a Mammal]
points=1
question=Let's say you turn state's evidence and need to "get on the 
lamb." If you wait /too long, what will happen?

q1=You'll end up on the sheep
q2=You'll end up on the cow
q3=You'll end up on the goat
q4=You'll end up on the emu
answer=1
explantion=A lamb is just a young sheep.[The Godfather Will Get Down 
With You Now]...HTH,-- Alan GauldAuthor of the Learn to Program web 
sitehttp://www.alan-g.me.uk/ 



___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-24 Thread Vincent Balmori

"Your whole approach is very fragile in this respect, it only 
takes one small mistake in the data to wreck your program,. 
Somethjing like a config file format would be much more 
robust (and readable) the config reader module would make 
sure you got what you expected back. "

Can you please explain more on what you mean by this?


Alan Gauld wrote:
> 
> 
> "Vincent Balmori"  wrote
> 
>> It's working fine now with the scoring, but now at the end of the 
>> program
>> for some reason I get this error message:
>>
> "/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
>> line 27, in next_block
>>point = int(next_line(the_file))
>> ValueError: invalid literal for int() with base 10: ''
> 
> Thats because after the last question you try to read another
> block and don't check anywhere whether you actually read
> anything. Your next_block code just assumes there will
> always be valid data there, but at the end of the file there
> won't be. You get away with category being blank
> because replace() doesn't complain. But int() does.
> 
> Your whole approach is very fragile in this respect, it only
> takes one small mistake in the data to wreck your program,.
> Somethjing like a config file format would be much more
> robust (and readable) the config reader module would make
> sure you got what you expected back.
> 
> HTH,
> 
> 
> -- 
> Alan Gauld
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> 
> 
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Trivia-tp31917610p31917979.html
Sent from the Python - tutor mailing list archive at Nabble.com.

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-24 Thread Alan Gauld


"Vincent Balmori"  wrote

It's working fine now with the scoring, but now at the end of the 
program

for some reason I get this error message:


"/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",

line 27, in next_block
   point = int(next_line(the_file))
ValueError: invalid literal for int() with base 10: ''


Thats because after the last question you try to read another
block and don't check anywhere whether you actually read
anything. Your next_block code just assumes there will
always be valid data there, but at the end of the file there
won't be. You get away with category being blank
because replace() doesn't complain. But int() does.

Your whole approach is very fragile in this respect, it only
takes one small mistake in the data to wreck your program,.
Somethjing like a config file format would be much more
robust (and readable) the config reader module would make
sure you got what you expected back.

HTH,


--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/


___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-24 Thread Andre Engels
On Fri, Jun 24, 2011 at 8:56 AM, Vincent Balmori
wrote:

>
> <<
> point = int(next_line(the_file))
>
> If x is a string that can be interpreted as an integer number, int(x) is
> that integer number; if the string is not the representation of an integer,
> this will lead to a ValueError.
>
> --
> André Engels, andreeng...@gmail.com>>>
>
>
> It's working fine now with the scoring, but now at the end of the program
> for some reason I get this error message:
>
> Traceback (most recent call last):
>  File
>
> "/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
> line 83, in 
>main()
>  File
>
> "/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
> line 76, in main
>category, point, question, answers, correct, explanation =
> next_block(trivia_file)
>  File
>
> "/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
> line 27, in next_block
> point = int(next_line(the_file))
> ValueError: invalid literal for int() with base 10: ''
>
>
The important thing in such a case is reading the error message and the last
line in the error trace. In this case the error message is:

ValueError: invalid literal for int() with base 10: ''

This means that the int() function is being called with something that is
not an integer - it even says what that something is, namely '' - that is,
the empty string. Apparently at some time you come to the line

point = int(next_line(the_file))

when next_line(the_file) is the empty string.

-- 
André Engels, andreeng...@gmail.com
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-23 Thread Vincent Balmori

<<>>


It's working fine now with the scoring, but now at the end of the program
for some reason I get this error message:

Traceback (most recent call last):
  File
"/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
line 83, in 
main()
  File
"/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
line 76, in main
category, point, question, answers, correct, explanation =
next_block(trivia_file)
  File
"/Users/vincentbalmori/Desktop/Python/py3e_source/chapter07/trivia_challenge2.py",
line 27, in next_block
point = int(next_line(the_file))
ValueError: invalid literal for int() with base 10: ''
-- 
View this message in context: 
http://old.nabble.com/Trivia-tp31917610p31917701.html
Sent from the Python - tutor mailing list archive at Nabble.com.

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia

2011-06-23 Thread Vincent Balmori

***ignore the "point = point" line in the next_block() function.
-- 
View this message in context: 
http://old.nabble.com/Trivia-tp31917610p31917637.html
Sent from the Python - tutor mailing list archive at Nabble.com.

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Trivia

2011-06-23 Thread Vincent Balmori

I have to improve the trivia_challenge program so each question has a
different point value. I added a point into the text file after each
category line, so the next_block() can call it. Whenever the program
calculates the 'score = point' in main() it comes up with "TypeError:
unsupported operand type(s) for +=: 'int' and 'str' " The problem is I am
having trouble changing "point = next_line(the_file)" in the next_block() to
be an int type. 

http://old.nabble.com/file/p31917610/trivia_challenge2.py
trivia_challenge2.py 

http://old.nabble.com/file/p31917610/trivia.txt trivia.txt 



-- 
View this message in context: 
http://old.nabble.com/Trivia-tp31917610p31917610.html
Sent from the Python - tutor mailing list archive at Nabble.com.

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia program.

2005-02-16 Thread Liam Clarke
Or 
 name = raw_input("Hi. What's your name? ")
called = "%s " % name 


On Wed, 16 Feb 2005 11:46:09 +0100, Pierre Barbier de Reuille
<[EMAIL PROTECTED]> wrote:
> Mmmhh ... one very simple way would be to replace your first line by :
> 
> name = raw_input("Hi. What's your name? ") + "  "
> 
> But if you want to keep the name as it is, I bet the best way is to
> replace your second line by :
> 
> called = "  ".join([ name for i in xrange(5) ])
> 
> The advantage of this second method is the "  " is added only *between*
> the names, and not after ...
> 
> Pierre
> 
> . Sm0kin'_Bull a écrit :
> > Hi, I got a problem with this program.
> >
> >
> > name = raw_input("Hi. What's your name? ")
> > called = name * 5
> > print "\nIf a small child were trying to get your attention, " \
> >"your name would become:"
> > print called
> > When i input the name like "John Goodman"
> >
> > it prints like...
> >
> > John GoodmanJohn GoodmanJohn GoodmanJohn GoodmanJohn Goodman
> >
> > But i want to print it like...
> >
> > John Goodman  John Goodman  John Goodman  John Goodman  John Goodman
> >
> > How can I do it?
> >
> > 
> > Express yourself instantly with MSN Messenger! MSN Messenger
> >  Download today it's FREE!
> >
> >
> > 
> >
> > ___
> > Tutor maillist  -  Tutor@python.org
> > http://mail.python.org/mailman/listinfo/tutor
> 
> --
> Pierre Barbier de Reuille
> 
> INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
> Botanique et Bio-informatique de l'Architecture des Plantes
> TA40/PSII, Boulevard de la Lironde
> 34398 MONTPELLIER CEDEX 5, France
> 
> tel   : (33) 4 67 61 65 77fax   : (33) 4 67 61 56 68
> ___
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia program.

2005-02-16 Thread Max Noel
On Feb 16, 2005, at 10:26, . Sm0kin'_Bull wrote:
it prints like...
 
John GoodmanJohn GoodmanJohn GoodmanJohn GoodmanJohn Goodman
 
But i want to print it like...
 
John Goodman  John Goodman  John Goodman  John Goodman  John Goodman
 
How can I do it?
Try replacing the called = name * 5 line with:
if not name.endswith(' '):
called = ((name + ' ') * 5).strip()
else:
called = (name * 5).strip()
-- Max
maxnoel_fr at yahoo dot fr -- ICQ #85274019
"Look at you hacker... A pathetic creature of meat and bone, panting 
and sweating as you run through my corridors... How can you challenge a 
perfect, immortal machine?"

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trivia program.

2005-02-16 Thread Pierre Barbier de Reuille
Mmmhh ... one very simple way would be to replace your first line by :
name = raw_input("Hi. What's your name? ") + "  "
But if you want to keep the name as it is, I bet the best way is to 
replace your second line by :

called = "  ".join([ name for i in xrange(5) ])
The advantage of this second method is the "  " is added only *between* 
the names, and not after ...

Pierre
. Sm0kin'_Bull a écrit :
Hi, I got a problem with this program.
 
 
name = raw_input("Hi. What's your name? ")
called = name * 5
print "\nIf a small child were trying to get your attention, " \
   "your name would become:"
print called
When i input the name like "John Goodman"
 
it prints like...
 
John GoodmanJohn GoodmanJohn GoodmanJohn GoodmanJohn Goodman
 
But i want to print it like...
 
John Goodman  John Goodman  John Goodman  John Goodman  John Goodman
 
How can I do it?


Express yourself instantly with MSN Messenger! MSN Messenger 
 Download today it's FREE!


___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor
--
Pierre Barbier de Reuille
INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France
tel   : (33) 4 67 61 65 77fax   : (33) 4 67 61 56 68
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Trivia program.

2005-02-16 Thread . Sm0kin'_Bull
Hi, I got a problem with this program.
 
 
name = raw_input("Hi. What's your name? ")called = name * 5print "\nIf a small child were trying to get your attention, " \   "your name would become:"print called
When i input the name like "John Goodman"
 
it prints like...
 
John GoodmanJohn GoodmanJohn GoodmanJohn GoodmanJohn Goodman
 
But i want to print it like...

 
John Goodman  John Goodman  John Goodman  John Goodman  John Goodman
 
How can I do it?Express yourself instantly with MSN Messenger! MSN Messenger Download today it's FREE!

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor