[Tutor] help with random.randint (cont. -- now: pseudo code)
ldl08 at gmx.net
Wed Feb 3 07:12:42 CET 2010
Hello Benno, list,
thanks for those clarifications, which, well, clarify things ;-)
This is my latest creation:
terms = 
for i in range(2):
j = terms
k = terms
print "%3d\nx%2d" % (j, k)
Which works. However, it merely prints a multiplication task. Anyway,
this was just a prelude. In the end, I want far more, namely to create,
ask, and verify some multiplication questions. Here is my pseudo code of
this little project:
pool = 
correct = 0
incorrect = 0
generate all multiplication combinations possible
append as tuple to pool
eliminate 'mirrored doubles' (i.e. 7x12 and 12x7)
for question in pool:
take answer from user
if user answer == solution:
correct += 1
remove question from pool
incorrect += 1
print number of questions asked
print number of questions answered correctly
print percentage of correct answers
answer = raw_input("Try again the incorrect questions? (y/n) ")
if answer == "y":
I think it is sensible to
* first create all possible solutions, then
* kick out doublettes, and only then
* ask questions
I have some questions though:
Is the overall structure and flow of this program okay? What are the
main problems you can spot immediately?
In the very end I would like to take this code as a basis for a wxPython
program. Are there any structural requirements I am violating here?
If I want to limit the number of questions asked, say to 20, would I
operate with slicing methods on the randomised pool?
How would you go about showing stats for the second run (i.e. the
FaultyAnswers)? Right now I am thinking of setting the global variables
correct and incorrect to 0 from _within_ askFaultyAnswers; then I would
run showStats() also from _within_ askFaultyAnswers. Good idea?
Many thanks for your guidance and input!
On 03/02/10 12:25, Benno Lang wrote:
> On Wed, Feb 3, 2010 at 12:21 PM, David<ldl08 at gmx.net> wrote:
>> Hello list,
>> I thought this was easy even for me, but I was wrong, I guess.
>> Here is what I want to do: take two random numbers between 1 and 99, and put
>> them into a list.
>> import random
>> terms = 
>> for i in range(2):
>> terms = random.randint(1, 99)
> All you're doing here is assigning an integer value to 'terms', twice.
> This assignment means 'terms' is no longer a list, but is now just an
> int. What you want is probably:
> terms.append (random.randint(1, 99))
>> So I tried to change line 4 to the following:
>> terms += random.randint(1, 99)
> You can't freely mix types with python operators, i.e. a_list += an_int
> But you can use += with 2 ints or 2 lists, so you could do:
> terms += [random.randint(1, 99)]
> I think using append is much nicer though.
>> I understand this error thus: once an int has been placed into the list
>> terms, no further int can be added. But: terms is a mutable list, and NOT an
>> 'int' object!
> The int was never added to the list in the first place, because list
> += int is not something Python understands.
>> So here are my questions: what is the problem, and how can I generate two
>> random numbers and store them (preferably in a tuple)?
> I hope what I wrote above answers the first question.
> IIRC tuples are immutable, so you either to create the list first and
> then convert it to a tuple:
> terms_tuple = tuple(terms)
> Or you can create a tuple from the beginning (without a loop):
> terms_tuple = (random.randint(1, 99), random.randint(1, 99))
More information about the Tutor