Python Forum
Using Dictionary to Test Evenness of Distribution Generated by Randint Function
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Using Dictionary to Test Evenness of Distribution Generated by Randint Function
#2
(Feb-21-2021, 04:09 PM)new_coder_231013 Wrote: Hi,

This is my second post on any sort of coding website and I'm an absolute beginner at programming. I'm trying to learn Python and am currently about halfway through an introductory book in which the author presents a block of code showing how to test the "evenness" of the randint function in Python using a dictionary (taking the range of numbers from 1 to 10 as an example). I'm having trouble figuring out exactly what is going on in this code. Here it is:

frequency = {}
for i in range(1000):
     num = randint(1, 10)
     if frequency.has_key(num):
          frequency[num] = frequency[num] + 1
     else:
          frequency[num] = 1

print frequency
The output from this code is given in the book as follows:

Output:
{1: 99, 2: 105, 3: 93, 4: 114, 5: 81, 6: 95, 7: 82, 8: 116, 9: 118, 10: 97}
The author writes that "It's not perfectly even, but most statisticians would be happy with our result."

Here is what I think the code is doing:

The first line defines the "frequency" variable as an empty dictionary.
The second and third lines generate a random number between 1 and 10 1,000 times (I think).
The lines after this with the "if ... else" statement have me a bit stumped. It seems to me that the "if frequency.has_key(num)" criterion will always be met, so the resulting frequency of each number will always have 1 added to it. Why? Does this have something to do with the fact that the range function in Python increments by 1 by default? I'm having trouble understanding how the "if ... else" statement helps generate a frequency distribution for numbers 1 to 10.

Also, if I'm correct that the "if frequency.has_key(num)" criterion will always be met, is the "else" statement at the end of the block of code even necessary?

Thanks in advance for any help.

I corrected lines 6 and 7. They were indented one step too far.

Most of your assumptions are correct but when the dictionary "frequency" is created it is empty so if you you just use line 5:
frequency[num] = frequency[num] + 1
you will get an error as the key, so far, does not exist. Line 7:
frequency[num] = 1
on the other hand, introduces the key. You could, of course create the dictionary with all the keys and a zero value for each of them but that is a bit tedious, so most people do as in the given code, maybe with line 5 as
frequency[num] += 1
. If you want to simplify the loop then this would do the trick:
frequency = dict((el,0) for el in range(1,11))
for i in range(1000):
     frequency[randint(1, 10)] +=1

print(frequency)
where the first line creates a dictionary with ten keys, 1..10, and sets the value to zero for each of them.
Reply


Messages In This Thread
RE: Using Dictionary to Test Evenness of Distribution Generated by Randint Function - by Serafim - Feb-21-2021, 04:46 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  distribution fit Glaucio 1 350 Apr-07-2024, 12:30 AM
Last Post: Larz60+
  Weight Distribution 11drk9 11 941 Mar-13-2024, 06:08 AM
Last Post: Pedroski55
  random numbers, randint janeik 2 645 Nov-27-2023, 05:17 PM
Last Post: janeik
  Unexpected output while using random.randint with def terickson2367 1 599 Oct-24-2023, 05:56 AM
Last Post: buran
Information Best distribution method inovermyhead100 0 629 Jul-19-2023, 07:39 AM
Last Post: inovermyhead100
  HOW TO USE C# GENERATED DLL davide_vergnani 2 1,849 Jun-12-2023, 03:35 PM
Last Post: davide_vergnani
  passing dictionary to the function mark588 2 1,071 Dec-19-2022, 07:28 PM
Last Post: deanhystad
  How do I use a whl puython distribution? barryjo 6 1,937 Aug-15-2022, 03:00 AM
Last Post: barryjo
Sad Iterate randint() multiple times when calling a function Jake123 2 2,165 Feb-15-2022, 10:56 PM
Last Post: deanhystad
  How to test and import a model form computer to test accuracy using Sklearn library Anldra12 6 3,290 Jul-03-2021, 10:07 AM
Last Post: Anldra12

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020