-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPyPoll.py
More file actions
130 lines (110 loc) · 4.95 KB
/
PyPoll.py
File metadata and controls
130 lines (110 loc) · 4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# The data we need to retrieve.
# 1. The total number of votes
# 2. A complete list of candidates who received votes
# 3. The percentage of votes each candidate won
# 4. The total number of votes each candidate won
# 5. The winner of the election based on popular vote.
#Import the datetime class from the datetime module.
import datetime as dt
#Use the now() attribute on the datetime class to get the present time
now = dt.datetime.now()
#Print the present time
print("The time right now is", now)
#Add our dependencies
import csv
import os
#Assign a variable for the file to load and the path
file_to_load = os.path.join("Resources", "election_results.csv")
#Assign a variable to save the file to a path
file_to_save = os.path.join("analysis", "election_analysis.txt")
#Initialize a total vote counter.
total_votes = 0
#Candidate Options
candidate_options = []
#1. Decalre the empty dictionary
candidate_votes = {}
#Winning Candidate and Winning Count Tracker
winning_candidate = ""
winning_count = 0
winning_percentage = 0
#Open the election results and read the file
with open(file_to_load) as election_data:
#To do: read and analyze the data here
#Read the file object with the reader function
file_reader = csv.reader(election_data)
#Read and print each row in the CSV file
headers = next(file_reader)
#Print each row in the CSV file.
for row in file_reader:
#Add to the total vote count
total_votes += 1
#Print the candidate name from each row
candidate_name = row[2]
#If the candidate does not match any exisiting candidate...
if candidate_name not in candidate_options:
#Add the candidate name to the candidate list.
candidate_options.append(candidate_name)
#2. Begin tracking that candidate's vote count.
candidate_votes[candidate_name] = 0
#Add a vote to that candidate's count
#Putting this within the if statement will only render us 1 in the dictionary
candidate_votes[candidate_name] += 1
#Save the results to our text file
with open(file_to_save, "w") as txt_file:
#Print the final vote count to the terminal
election_results = (
f"Election Results\n"
f"---------------------\n"
f"Total Votes: {total_votes:,}\n"
f"---------------------\n")
print(election_results, end="")
#Save the final vote count to the text file
txt_file.write(election_results)
#Determine the percentage of votes for each candidate by looping through the counts
#1. Iterate through the candidate list
for candidate_name in candidate_votes:
#2. Retrieve vote count of a candidate
votes = candidate_votes[candidate_name]
#3. Calculate the percentage of votes
vote_percentage = float(votes) / float(total_votes) * 100
#4. Print the candidate name and percentage of votes
#print(f"{candidate_name}: received {vote_percentage:.1f}% of the vote.")
#Determine winning vote count and candidate
#1. Determine if the votes are greater than the winning count
if (votes > winning_count) and (vote_percentage > winning_percentage):
#2. If true then set winning_count = votes and winning_percent = vote_percentage
winning_count = votes
winning_percentage = vote_percentage
#3. Set the winning_candidate equal to the candidate's name
winning_candidate = candidate_name
#To do: print out the winning candidate, vote count and percentage to terminal
candidate_results = (f"{candidate_name}: {vote_percentage:.1f}% ({votes:,})\n")
#Print each candidate, their voter count, and percentage to the terminal
print(candidate_results)
txt_file.write(candidate_results)
winning_candidate_summary = (
f'-------------------------\n'
f'Winner: {winning_candidate}\n'
f'Winning Vote Count: {winning_count:,}\n'
f'Winning Percentage: {winning_percentage:.1f}%\n'
f'-------------------------\n')
print(winning_candidate_summary)
txt_file.write(winning_candidate_summary)
### Other Exercises ###
#Using the open() function with the "w" mode, we will write data to the txt file.
#outfile = open(file_to_save, "w")
#Write some data to the file.
#outfile.write("Hello World")
#Close the file.
#outfile.close()
#Create a file name variable to a direct or indirect path to a file.
#file_to_save = os.path.join("analysis", "election_analysis.txt")
#Using the with statement, open the file as a text file
#with open(file_to_save, "w") as txt_file:
#Write three countries to the file
#txt_file.write("Arapahoe, ")
#txt_file.write("Denver, ")
#txt_file.write("Jefferson")
#txt_file.write("Counties in the election\n------------------------\nArapahoe\nDenver\nJefferson")
#Close the file. It is important that you close the file after you read and write in order to save the new data.
election_data.close()