forked from lsommerer/blackjack2018
-
Notifications
You must be signed in to change notification settings - Fork 0
/
toolbox.py
172 lines (145 loc) · 4.85 KB
/
toolbox.py
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#
# These are procedures that I'm going to use over and over again.
#
def get_integer(prompt):
"""Asks the user the prompt and verifies they enter an integer"""
#
# If there's no space at the end of prompt, add one.
#
if prompt[-1] != " ":
prompt = prompt + " "
number = input(prompt)
#
# We're only going to use prompt again if they entered something that
# is not an integer, so it's simpler just to change the prompt once
# outside the loop.
#
prompt = prompt + "(integers only) "
#
# If they didn't enter an integer, ask them to enter one.
#
while not is_integer(number):
number = input(prompt)
number = int(number)
return number
def is_integer(number):
"""Returns True is number is an interger else it returns False."""
isInteger = True
#
# Remove leading and trailing whites space and
# check for 4 special cases of non-integers. Then
# remove any leading positive or negative signs.
#
number = str(number).strip()
if number in ['', '.', '+', '-']:
isInteger = False
if isInteger and number[0] in '+-':
number = number[1:]
#
# Loop through the string checking to make sure
# the characters are all legal integer characters.
#
position = 0
legalValues = '0123456789.'
while isInteger and position <= len(number) - 1:
if number[position] not in legalValues:
isInteger = False
if number[position] == '.':
legalValues = '0'
position += 1
return isInteger
def get_number(prompt):
"""Asks the user the prompt and verifies they enter a float"""
if prompt[-1] != " ":
prompt += " "
number = input(prompt)
while not is_number(number):
if prompt[-16:] != " (numbers only) ":
prompt = prompt + "(numbers only) "
number = input(prompt)
number = float(number)
return number
def is_number(number):
'''Returns True is testValue is a number, otherwise returns False.'''
isNumber = True
testValue = str(number)
isNumber = True
#
# Remove leading and trailing whites space and
# check for 4 special cases of non-numbers. Then
# remove any leading positive or negative signs.
#
number = str(number).strip()
if number in ['', '.', '+', '-']:
isNumber = False
if isNumber and number[0] in '+-':
number = number[1:]
#
# Loop through the string checking to make sure
# the characters are all legal integer characters.
#
legalValues = '.0123456789'
for character in number:
if character not in legalValues:
isNumber = False
if character == '.':
legalValues = '0123456789'
return isNumber
def get_positive_number(prompt):
"""returns a positive number."""
number = get_number(prompt)
while number < 0:
print("You have to enter a positive value.")
number = get_number(prompt)
return number
def get_integer_between(low, high, prompt="Enter an integer:"):
prompt += " (" + str(low) + "-" + str(high) + ")"
number = get_integer(prompt)
while (number < low) or (number > high):
number = get_integer(prompt)
return number
def get_number_between(low, high, prompt="Enter a number:"):
number = get_number(prompt)
prompt += " (" + str(low) + "-" + str(high) + ")"
while (number < low) or (number > high):
number = get_number(prompt)
return number
def get_boolean(prompt):
"""Ask the user a yes or no question"""
prompt = prompt + " (y/n) "
answer = input(prompt)
answer = answer.lower()
if answer in ['yes', 'sure', 'yeah', 'true', 'absolutely', 'y', 'da', 'si']:
answer = True
elif answer in ['n', 'no', 'nope', 'nah']:
answer = False
else:
prompt = "Does " + answer + " mean yes or no?"
answer = get_boolean(prompt)
return answer
def get_string(prompt):
"""Get and return a non-empty string"""
if prompt[-1] != " ":
prompt = prompt + " "
string = input(prompt)
while not string:
if prompt[-31:] != " (you have to enter something) ":
prompt = prompt + "(you have to enter something) "
string = input(prompt)
return string
def print_separator(character, length=60):
"""Prints length number of characters."""
string = (character[0] * int(length))
print(string)
def print_centered(string, length=60, character=" "):
"""Prints a string centered on a line of length length."""
stringLength = len(string)
padding = int((length - stringLength) / 2)
if padding > 0:
centeredString = character[0] * padding + string + character[0] * padding
else:
centeredString = string[:length]
print(centeredString)
def yes_or_no(prompt):
"""This allows my older code to work."""
return get_boolean(prompt)