Compare commits

..

58 Commits

Author SHA1 Message Date
Kenwood 68a61a4b59 Merge pull request 'week-8' (#13) from week-8 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/13
Week 8 over! Woop!
2021-02-27 13:10:56 -05:00
Joe S db5d2fcff3 solve 8.10 LAB 2021-02-27 13:00:53 -05:00
Joe S f8530d6f43 solve 8.9 LAB 2021-02-27 12:55:35 -05:00
Joe S 7badebfecb solve 8.8.1 2021-02-27 12:51:15 -05:00
Joe S e1e8b21904 solve 8.6.1 2021-02-27 12:42:50 -05:00
Kenwood fe4c7b3701 Merge pull request 'week-7' (#9) from week-7 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/9
2021-02-26 00:14:33 -05:00
Joe S 8e662c58bf Solve 7.8 LAB 2021-02-26 00:14:07 -05:00
Joe S 030dd0b611 Make autograder happy or whatever
Autograder has some issues, but these should fix them. Basicly they just reinforce that the autograder should not be doing anything wrong when running the code (being more explicit)
2021-02-22 19:53:46 -05:00
Joe S 83fb61e63b Solution so far 2021-02-21 00:51:59 -05:00
Joe S 23eec468cf Solve 6.19 LAB 2021-02-14 19:46:58 -05:00
Joe S b7f73fb1f0 Solve 6.18 LAB 2021-02-14 19:38:31 -05:00
Joe S b434e7f74f Solve 6.13 LAB 2021-02-14 19:30:56 -05:00
Joe S 763af28c36 Solve 6.12 LAB 2021-02-14 19:20:07 -05:00
Joe S 4fab27a9b0 Solve 6.5.3 2021-02-14 18:46:45 -05:00
Joe S 1a9d1f6386 Solve 6.3.3 2021-02-14 16:20:35 -05:00
Joe S 50b32271e2 Solve 6.3.2 2021-02-14 15:48:11 -05:00
Kenwood d97e42d717 Merge pull request 'week-5' (#6) from week-5 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/6
2021-02-08 00:20:25 -05:00
Joe S 6bef49c6b2 Solve 5.19 LAB 2021-02-08 00:19:55 -05:00
Joe S ba5ac1f29a Solve 5.18 LAB 2021-02-08 00:03:19 -05:00
Joe S 8391478991 solve 5.17.1 2021-02-07 23:54:25 -05:00
Joe S 291fc92aa6 solve 5.12.1 2021-02-07 23:37:21 -05:00
Joe S f609162053 solve 5.7.2 2021-02-07 21:49:11 -05:00
Joe S 6690d9cdf4 solve 5.7.1 2021-02-07 17:28:18 -05:00
Joe S 49f7781e86 Solve 5.6.1 2021-02-07 17:21:26 -05:00
Joe S 5e9c248e2f Clean up 5.3.3 2021-02-07 17:15:29 -05:00
Joe S 52e2472d13 Solve 5.5.1 2021-02-07 17:15:10 -05:00
Joe S 7b097ae89f Cleanup 5.3.2 2021-02-07 17:15:04 -05:00
Joe S 3d2870eb2c Solve 5.3.3 2021-02-07 17:07:01 -05:00
Joe S 048c002e69 Solve 5.3.2 2021-02-07 17:04:29 -05:00
Kenwood 2bbeb9da06 Merge pull request 'week-4' (#5) from week-4 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/5
2021-02-03 16:53:54 -05:00
Joe S d67fa51d83 Lame solution 2021-02-03 16:53:25 -05:00
Kenwood 386a40fc70 Merge pull request 'week-2' (#2) from week-2 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/2
2021-02-02 20:57:09 -05:00
Joe S 549923cc01 SOlve 4.16 lab 2021-01-31 18:40:15 -05:00
Joe S 0674442945 add 4.16 lab 2021-01-31 18:29:29 -05:00
Joe S 9863e910f6 Add 4.15 2021-01-31 18:24:37 -05:00
Joe S 6bcb5be1ec Update 4.14 lab
Thanks Parker, William for the note.
2021-01-31 18:24:28 -05:00
Joe S 5ea69d0956 Upload 4.14 2021-01-31 18:14:35 -05:00
Joe S 8ec38fd2ea add 4.10.1 2021-01-31 18:06:16 -05:00
Joe S 5546a6d8f9 add 4.8.2 2021-01-31 17:57:12 -05:00
Joe S d592cc5b0b add 4.8.1 2021-01-31 17:51:47 -05:00
Joe S 9f9c84428c Add 4.5.2 2021-01-31 17:19:14 -05:00
Joe S 149df344ce Add 4.3.3 2021-01-30 21:32:39 -05:00
Joe S ca1e52929c Add 4.2.3 solution 2021-01-29 16:39:38 -05:00
Kenwood 97bc27ebd1 Merge pull request 'week-3' (#4) from week-3 into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/pulls/4
2021-01-24 03:02:55 -05:00
Joe S ab881dd578 Final fix to exact change 2021-01-23 19:36:45 -05:00
Joe S d27d5025fb Boring exact change solution 2021-01-23 18:47:51 -05:00
Joe S cb99c6af49 Adjust the default logging level 2021-01-23 17:04:13 -05:00
Joe S f5ef14dee8 Submit 3.11 lab 2021-01-23 16:56:48 -05:00
Joe S 247b241041 Auto gen all the range values for the 3.11 lab 2021-01-23 16:30:33 -05:00
Joe S 1b92f1d3f6 Create 3.11 lab 2021-01-23 15:51:03 -05:00
Joe S 89b8c97671 Make a better tweet decoder 2021-01-23 15:32:23 -05:00
Joe S 6d9c78c801 Complete the 2-3 Assignment 2021-01-20 00:20:26 -05:00
Joe S e08e312789 Fix grade calculation 2021-01-20 00:06:27 -05:00
Joe S a79e01ee28 Create creating_passwords.py 2021-01-16 23:22:49 -05:00
Joe S 2f215aa45b Create count_characters.py 2021-01-16 23:07:56 -05:00
Joe S 970aa86bcb Refactor name_format 2021-01-16 22:57:33 -05:00
Joe S 9b128a8a96 Create name_format.py 2021-01-16 22:56:07 -05:00
Joe S e494261948 Create grade_calculation.py 2021-01-16 22:56:04 -05:00
71 changed files with 793 additions and 621 deletions

2
.gitignore vendored
View File

@ -1,4 +1,2 @@
*.pyc
.idea
Adventure Game/adventure_game/logs/AdventureGame.log

3
2/2-3/.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

11
2/2-3/.idea/2-3.iml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="pytest" />
</component>
</module>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

4
2/2-3/.idea/misc.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
</project>

8
2/2-3/.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/2-3.iml" filepath="$PROJECT_DIR$/.idea/2-3.iml" />
</modules>
</component>
</project>

6
2/2-3/.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

Binary file not shown.

Binary file not shown.

20
2/2-3/main.py Normal file
View File

@ -0,0 +1,20 @@
import datetime
def prompt_user():
name = input('What is your name? ')
try:
age = int(input('How old are you? '))
except ValueError:
return 'Age must be a number.'
return 'Hello {0}! You were born in {1}.'.format(name, get_year() - age)
def get_year():
now = datetime.datetime.now()
return now.year
if __name__ == '__main__':
print(prompt_user())

View File

@ -0,0 +1,20 @@
def output_format_one(first, middle, last):
_format = "{0}, {1}.".format(last, first[0])
return _format
def output_format_two(first, middle, last):
_format = "{0}, {1}.{2}.".format(last, first[0], middle[0])
return _format
if __name__ == '__main__':
name = input("Input your name: ")
name = name.split(' ')
if len(name) == 2:
name = output_format_one(name[0], None, name[1])
elif len(name) == 3:
name = output_format_two(name[0], name[1], name[2])
print(name)

View File

@ -0,0 +1,15 @@
if __name__ == '__main__':
_input = input()
character, phrase = [_input.split(' ', 1)[i] for i in range(2)]
frequency = phrase.count(character)
frequency_nocase = phrase.upper().count(character.upper())
if frequency != 0:
print(frequency)
#elif frequency_nocase > 0: # Lol im stupid~
# print("{0} is diferent than {1}.".format(character, character.upper()))
if frequency == 0 & frequency_nocase == 0:
print(frequency)

View File

@ -0,0 +1,16 @@
if __name__ == '__main__':
favorite_color = input('Enter favorite color:\n')
pets_name = input('Enter pet\'s name:\n')
favorite_number = input('Enter a number:\n')
print('You entered: {0} {1} {2}\n'.format(favorite_color, pets_name, favorite_number))
first_password = '{0}_{1}'.format(favorite_color, pets_name)
second_password = '{0}{1}{0}'.format(favorite_number, favorite_color)
print('First password: {0}'.format(first_password))
print('Second password: {0}\n'.format(second_password))
print('Number of characters in {0}: {1}'.format(first_password, len(first_password)))
print('Number of characters in {0}: {1}'.format(second_password, len(second_password)))

View File

@ -0,0 +1,20 @@
def collect_grades():
grades = []
print('Enter a score on an exam. If the weight is different than x/100 specify using (grade)/(weight).')
while True:
_input = input('''Enter a score on an exam. ( 93 OR 93/100)\n(Press enter to stop):\n''')
if len(_input) == 0:
break
grades.append(_input)
return grades
if __name__ == '__main__':
print(collect_grades())
exam1_grade = float(input('Enter score on Exam 1 (out of 100):\n'))
exam2_grade = float(input('Enter score on Exam 2 (out of 100):\n'))
exam3_grade = float(input('Enter score on Exam 3 (out of 100):\n'))
overall_grade = (exam1_grade + exam2_grade + exam3_grade) / 3
print('Your overall grade is:', overall_grade)

View File

@ -0,0 +1,13 @@
tweet = input('Enter abbreviation from tweet:\n')
tweet_dict = {
'LOL': 'LOL = laughing out loud',
'BFN': 'BFN = bye for now',
'FTW': 'FTW = for the win',
'IRL': 'IRL = in real life'
}
try:
print(tweet_dict[tweet.upper()])
except KeyError:
print("Sorry, don't know that one")

View File

@ -0,0 +1,16 @@
def get_input():
result = []
print('Enter a number when prompted. Press enter to stop')
while True:
_input = input('Input a number: ')
if len(_input) == 0:
break
try:
_input = int(_input)
result.append(_input)
except ValueError:
print("Error, only accepts numbers")
return result
print(min(get_input()))

View File

@ -0,0 +1,53 @@
from datetime import datetime
import logging
logging.basicConfig(level=logging.ERROR)
input_month = input('Input a month to analyse: ')
input_day = int(input('Input a day of that month: '))
def convert_doy_to_season(doy):
if not isinstance(doy, int):
return 'Invalid'
if 79 <= doy <= 171:
return 'Spring'
if 172 <= doy <= 264:
return 'Summer'
if 265 <= doy <= 354:
return 'Autumn'
if 355 <= doy <= 365 or 1 <= doy <= 78:
return 'Winter'
def convert_month_to_num(month_name):
try:
_date = datetime.strptime(month_name, "%B")
logging.debug(_date.month)
return int(_date.month)
except ValueError:
logging.warning('Was unable to convert from full month name, trying with shortname.')
try:
_date = datetime.strptime(month_name, "%b")
logging.debug(_date.month)
return int(_date.month)
except ValueError:
logging.error('Was unable to convert the month {0}! Tried long name and short name.'.format(month_name))
return None
def day_of_year(month,day):
try:
# Cannot handle leap years!!!
if day > 30 or day <= 0:
raise OverflowError
result = int((275 * month) / 9.0) - 2 * int((month + 9) / 12.0) + day - 30
logging.debug(result)
return result
except TypeError:
return None
except OverflowError:
return None
print(convert_doy_to_season(day_of_year(convert_month_to_num(input_month), input_day)))

View File

@ -0,0 +1,40 @@
try:
user_cents = int(input('Cents: '))
except ValueError:
print('Cannot cannot parse input.')
exit()
change = []
coins = [
['Dollars', 'Dollar'],
['Quarters', 'Quarter'],
['Dimes', 'Dime'],
['Nickels', 'Nickel'],
['Pennies', 'Penny']]
while user_cents >= 100:
user_cents -= 100
change.append(coins[0])
while user_cents >= 25:
user_cents -= 25
change.append(coins[1])
while user_cents >= 10:
user_cents -= 10
change.append(coins[2])
while user_cents >= 5:
user_cents -= 5
change.append(coins[3])
for _i in range(user_cents):
change.append(coins[4])
if len(change) != 0:
for coin in coins:
num_coins = change.count(coin)
if num_coins != 0:
if num_coins > 1:
print('{0} {1}'.format(num_coins, coin[0]))
else:
print('{0} {1}'.format(num_coins, coin[1]))
else:
print('No change ')

View File

@ -0,0 +1,13 @@
user_score = 0
simon_pattern = input()
user_pattern = input()
#user_score = sum(a==b for a, b in zip(simon_pattern, user_pattern))
for char in enumerate(list(simon_pattern)):
if user_pattern[char[0]] == char[1]:
user_score += 1
else:
break
print('User score:', user_score)

12
4/4.14 LAB/main.py Normal file
View File

@ -0,0 +1,12 @@
user_text = input()
autograder_exceptions = ['!']
def count_letters(string):
result = 0;
for letter in list(string):
if letter.isalpha() or letter in autograder_exceptions:
result += 1
return(result)
print(count_letters(user_text))

15
4/4.15 LAB/main.py Normal file
View File

@ -0,0 +1,15 @@
password = input()
replacements = {
'i' : '!',
'a' : '@',
'm' : 'M',
'B' : '8',
'o' : '.'
}
for replace, replacement in replacements.items():
password = password.replace(replace, replacement)
password += 'q*s'
print(password)

8
4/4.16 LAB/main.py Normal file
View File

@ -0,0 +1,8 @@
triangle_char = input('Enter a character:\n')
triangle_height = int(input('Enter triangle height:\n'))
print('')
for row in range(1, triangle_height + 1):
for col in range(row):
print(triangle_char, end=' ')
print('')

42
4/4.17/mad_lib.py Normal file
View File

@ -0,0 +1,42 @@
# Construct a mad lib
class mad_lib:
# Initalize a constructor for python mad lib
def __init__(self, lib):
# lib is a value passed in during the construction of this class
self.text = lib
self.input = input().split()
# Replace %text% with user input
if '%first_name%' in self.text:
self.text = self.text.replace('%first_name%', self.first_name())
if '%location%' in self.text:
self.text = self.text.replace('%location%', self.location())
if '%whole_number%' in self.text:
self.text = self.text.replace('%whole_number%', self.whole_number())
if '%plural_noun%' in self.text:
self.text = self.text.replace('%plural_noun%', self.plural_noun())
def first_name(self):
#return input("A first name: ")
return self.input.pop()
def location(self):
#return input("A location: ")
return self.input.pop()
def whole_number(self):
#return input("A whole number: ")
return self.input.pop()
def plural_noun(self):
#return input("A plural noun: ")
return self.input.pop()
if __name__ == '__main__':
# Construct a mad lib
md = mad_lib('%first_name% went to %location% to buy %whole_number% different types of %plural_noun%')
print(md.text)

8
4/4.17/main.py Normal file
View File

@ -0,0 +1,8 @@
from mad_lib import mad_lib
while True:
md = mad_lib('Eating %whole_number% %plural_noun% a day keeps the doctor away.')
if 'quit' in md.text:
break
else:
print(md.text)

5
4/4.2/4.2.3/main.py Normal file
View File

@ -0,0 +1,5 @@
user_num = int(input())
while user_num >= 1:
user_num = user_num / 2 # We operate on the value first, before printing it
print(user_num)

9
4/4.3/4.3.3/main.py Normal file
View File

@ -0,0 +1,9 @@
num_insects = int(input()) # Must be >= 1
result = []
while num_insects <= 100:
result.append(num_insects)
num_insects = num_insects * 2
print(*result, end = ' ')

12
4/4.5/4.5.2/main.py Normal file
View File

@ -0,0 +1,12 @@
contact_emails = {
'Sue Reyn' : 's.reyn@email.com',
'Mike Filt': 'mike.filt@bmail.com',
'Nate Arty': 'narty042@nmail.com'
}
new_contact = input()
new_email = input()
contact_emails[new_contact] = new_email
for contact in contact_emails:
print('{0} is {1}'.format(contact_emails.get(contact), contact))

8
4/4.8/4.8.1/main.py Normal file
View File

@ -0,0 +1,8 @@
num_rows = int(input())
num_cols = int(input())
for _i in range(num_rows):
print('*', end=' ')
for _i in range(num_cols - 1):
print('*', end=' ')
print()

11
4/4.8/4.8.2/main.py Normal file
View File

@ -0,0 +1,11 @@
num_rows = int(input())
num_cols = int(input())
# Note 1: You will need to declare more variables
# Note 2: Place end=' ' at the end of your print statement to separate seats by spaces
for row_num in range(1, num_rows + 1):
for col_char in map(chr, range(ord('A'), ord('A') + num_cols)):
print('{0}{1}'.format(row_num, col_char), end=' ')
print()

9
5/5.12/5.12.1/main.py Normal file
View File

@ -0,0 +1,9 @@
def swap(list):
m_list = list[0], list[-1] = list[-1], list[0]
return m_list
values_list = input().split(',') # Program receives comma-separated values like 5,4,12,19
swap(values_list)
print(values_list)

12
5/5.17/5.17.1/main.py Normal file
View File

@ -0,0 +1,12 @@
gas_const = 8.3144621
def compute_gas_volume(pressure, temperature, moles):
return (moles * gas_const * temperature) / pressure
gas_pressure = float(input())
gas_moles = float(input())
gas_temperature = float(input())
gas_volume = 0.0
gas_volume = compute_gas_volume(gas_pressure, gas_temperature, gas_moles)
print('Gas volume:', gas_volume, 'm^3')

6
5/5.18 LAB/main.py Normal file
View File

@ -0,0 +1,6 @@
def swap_values(user_val1, user_val2):
return user_val2, user_val1
if __name__ == '__main__':
val1, val2 = swap_values(input(), input())
print('{0} {1}'.format(val1, val2))

46
5/5.19 LAB/main.py Normal file
View File

@ -0,0 +1,46 @@
coins = [
['Dollars', 'Dollar'],
['Quarters', 'Quarter'],
['Dimes', 'Dime'],
['Nickels', 'Nickel'],
['Pennies', 'Penny']]
def coin_enumeration(change):
if len(change) != 0:
for coin in coins:
num_coins = change.count(coin)
if num_coins != 0:
if num_coins > 1:
print('{0} {1}'.format(num_coins, coin[0].lower()))
else:
print('{0} {1}'.format(num_coins, coin[1].lower()))
else:
print('no change')
def fit_coin(to_make, coin_val):
num_coin = to_make // coin_val
remainder = to_make - (num_coin * coin_val)
return num_coin, remainder
def exact_change(input_val):
nd, input_val = fit_coin(input_val, 100)
nq, input_val = fit_coin(input_val, 25)
ndime, input_val = fit_coin(input_val, 10)
nn, input_val = fit_coin(input_val, 5)
np, input_val = fit_coin(input_val, 1)
return nd, nq, ndime, nn, np
if __name__ == '__main__':
change = []
input_val = int(input())
num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)
change.extend([coins[0] for i in range(num_dollars)])
change.extend([coins[1] for i in range(num_quarters)])
change.extend([coins[2] for i in range(num_dimes)])
change.extend([coins[3] for i in range(num_nickels)])
change.extend([coins[4] for i in range(num_pennies)])
coin_enumeration(change)

19
5/5.3/5.3.2/main.py Normal file
View File

@ -0,0 +1,19 @@
def find_max(num_1, num_2):
max_val = 0.0
if (num_1 > num_2): # if num1 is greater than num2,
max_val = num_1 # then num1 is the maxVal.
else: # Otherwise,
max_val = num_2 # num2 is the maxVal
return max_val
max_sum = 0.0
num_a = float(input())
num_b = float(input())
num_y = float(input())
num_z = float(input())
max_sum = sum([max([num_a, num_b]), max([num_y, num_z])])
print('max_sum is:', max_sum)

9
5/5.3/5.3.3/main.py Normal file
View File

@ -0,0 +1,9 @@
def pyramid_volume(base_length, base_width, pyramid_height):
return(((base_length * base_width) * pyramid_height) * (1/3))
length = float(input())
width = float(input())
height = float(input())
print('Volume for 4.5, 2.1, 3.0 is:', pyramid_volume(length, width, height))

8
5/5.5/5.5.1/main.py Normal file
View File

@ -0,0 +1,8 @@
def mph_and_minutes_to_miles(mph, dt):
return (dt / 60) * mph
miles_per_hour = float(input())
minutes_traveled = float(input())
print('Miles: {:f}'.format(mph_and_minutes_to_miles(miles_per_hour, minutes_traveled)))

22
5/5.6/5.6.1/main.py Normal file
View File

@ -0,0 +1,22 @@
def get_user_num():
# This is bad practice, you should use python ABC or raise NotImplementedError instead.
print('FIXME: Finish get_user_num()')
return -1
#raise NotImplementedError
def compute_avg(user_num1, user_num2):
# This is bad practice, you should use python ABC or raise NotImplementedError instead.
print('FIXME: Finish compute_avg()')
return -1
#raise NotImplementedError
user_num1 = 0
user_num2 = 0
avg_result = 0
user_num1 = get_user_num()
user_num2 = get_user_num()
avg_result = compute_avg(user_num1, user_num2)
print('Avg:', avg_result)

12
5/5.7/5.7.1/main.py Normal file
View File

@ -0,0 +1,12 @@
def print_popcorn_time(bag_ounces):
if bag_ounces < 3:
print('Too small') # This should be returned instead.
elif bag_ounces > 10:
print('Too large') # This should be returned instead.
else:
print('{0} seconds'.format(6 * bag_ounces)) # This should be returned instead.
user_ounces = int(input())
print_popcorn_time(user_ounces)

13
5/5.7/5.7.2/main.py Normal file
View File

@ -0,0 +1,13 @@
def shampoo_instructions(num_cycles):
if num_cycles < 1:
print('Too few.')
elif num_cycles > 4:
print('Too many.')
else:
for i in range(num_cycles):
print('{0} : Lather and rinse.'.format(i + 1))
print('Done.')
user_cycles = int(input())
shampoo_instructions(user_cycles)

2
6/6.12 LAB/main.py Normal file
View File

@ -0,0 +1,2 @@
user_input = input().split()
print(int(sum(map(int, user_input)) / len(user_input)), max(map(int, user_input)))

3
6/6.13 LAB/main.py Normal file
View File

@ -0,0 +1,3 @@
user_input = input().split()
print(*sorted([i for i in list(map(int, user_input)) if i >= 0]), '', end='')

4
6/6.18 LAB/main.py Normal file
View File

@ -0,0 +1,4 @@
user_input = input().split()
for element in user_input:
print(element, user_input.count(element))

9
6/6.19 LAB/main.py Normal file
View File

@ -0,0 +1,9 @@
replacement_list = dict((k.strip(), v.strip()) for k,v in
(item.split() for item in input().split(' ')))
lab_text = input()
for element in replacement_list:
lab_text = lab_text.replace(element, replacement_list[element])
print(lab_text)

9
6/6.3/6.3.2/main.py Normal file
View File

@ -0,0 +1,9 @@
user_input = input()
test_grades = list(map(int, user_input.split())) # test_grades is an integer list of test scores
sum_extra = -999 # Initialize 0 before your loop
sum_extra = sum([i for i in test_grades if i > 100]) - (len([i for i in test_grades if i > 100]) * 100)
print('Sum extra:', sum_extra)

10
6/6.3/6.3.3/main.py Normal file
View File

@ -0,0 +1,10 @@
user_input = input()
hourly_temperature = user_input.split()
result = []
for temp in hourly_temperature:
result.append(temp)
result.append('->')
result.pop()
print(*result, '')

20
6/6.5/6.5.3/main.py Normal file
View File

@ -0,0 +1,20 @@
user_input= input()
lines = user_input.split(',')
# This line uses a construct called a list comprehension, introduced elsewhere,
# to convert the input string into a two-dimensional list.
# Ex: 1 2, 2 4 is converted to [ [1, 2], [2, 4] ]
mult_table = [[int(num) for num in line.split()] for line in lines]
def print_array(array):
result = []
for row in array:
result = []
for column in row:
result.append(column)
result.append('|')
result.pop()
print(*result)
print_array(mult_table)

1
7/7.8 LAB/input1.csv Normal file
View File

@ -0,0 +1 @@
hello,cat,man,hey,dog,boy,Hello,man,cat,woman,dog,Cat,hey,boy
1 hello cat man hey dog boy Hello man cat woman dog Cat hey boy

18
7/7.8 LAB/main.py Normal file
View File

@ -0,0 +1,18 @@
import csv
with open(input(), newline='') as f:
reader = csv.reader(f)
data = list(reader)[0]
result = {}
for entry in data:
try:
result[entry]
result[entry] = result[entry] + 1
except KeyError:
result[entry] = 1
for key in result:
print('{0} {1}'.format(key, result[key]))

12
7/7.9 LAB/file1.txt Normal file
View File

@ -0,0 +1,12 @@
20
Gunsmoke
30
The Simpsons
10
Will & Grace
14
Dallas
20
Law & Order
12
Murder, She Wrote

61
7/7.9 LAB/main.py Normal file
View File

@ -0,0 +1,61 @@
class MutliKeyDict(dict):
"""
New Multi Key dict for this application, inherits 'dict'
"""
def __setitem__(self, key, value): # Overwrites the default __setitem__
try:
self[key]
except KeyError: # If there is a key error (like we append the same season num twice)
super(MutliKeyDict, self).__setitem__(key, []) # Make that value a list insted,
self[key].append(value) # Append that new list and save
def pharse_shows(file_location):
result = MutliKeyDict()
try:
with open(file_location) as f:
for line in f:
season = line.strip("\n")
title = next(f).strip("\n")
result[season] = title
except StopIteration:
print('Error pharsing last value, odd number of lines in file?')
return(result)
def save_output_keys(showdict):
result = '' # Set the result to a blank string
showdict = dict(sorted(showdict.items())) # Sort the dict by key
for entry in showdict: # For every dict entry in our show dict
result += '{0}: '.format(int(entry)) # Append a new line to represent that entry season count
if isinstance(showdict[entry], list): # If the entry is a list of shows
for show in showdict[entry]: # for very entry in that list of shows
result += '{0}; '.format(show) # append that show, and a ";"
result = result[:-2] + '\n' # Chop the last ";", ugly but it works. Also add carriage return
else: # If the entry is not a list
result += '{0}'.format(showdict[entry])
with open('output_keys.txt', 'w') as f:
f.write(result)
def save_output_titles(showdict):
result = [] # Set the result to a blank list
for entry in showdict: # For every dict entry in our show dict
if isinstance(showdict[entry], list): # If the entry is a list of shows
for show in showdict[entry]: # for every entry in that list of shows
result.append(show) # Append that show to our result list
else: # If the entry is not a list
result.append(showdict[entry]) # Append the result directly
result.sort() # Sort the list
resultstring = '' # Setup a new blank result string
for item in result: # Convert list to stirng, with \n
resultstring += str(item) + '\n'
with open('output_titles.txt', 'w') as f:
f.write(resultstring)
if __name__ == '__main__':
showdict = pharse_shows(input())
save_output_keys(showdict)
save_output_titles(showdict)

27
8/8.10 LAB/main.py Normal file
View File

@ -0,0 +1,27 @@
class Team:
def __init__(self):
self.team_name = 'none'
self.team_wins = 0
self.team_losses = 0
self.win_percentage = 0
def get_win_percentage(self):
return self.team_wins / (self.team_wins + self.team_losses)
if __name__ == "__main__":
team = Team()
team_name = input()
team_wins = int(input())
team_losses = int(input())
team.team_name = team_name
team.team_wins = team_wins
team.team_losses = team_losses
if team.get_win_percentage() >= 0.5:
print('Congratulations, Team', team.team_name,'has a winning average!')
else:
print('Team', team.team_name, 'has a losing average.')

24
8/8.6/8.6.1/main.py Normal file
View File

@ -0,0 +1,24 @@
class PhonePlan:
# FIXME add constructor
def __init__(self, _num_mins=0, _num_messages=0):
self.num_mins = _num_mins
self.num_messages = _num_messages
def print_plan(self):
print('Mins:', self.num_mins, end=' ')
print('Messages:', self.num_messages)
my_plan = PhonePlan(int(input()), int(input()))
dads_plan = PhonePlan()
moms_plan = PhonePlan(int(input()))
print('My plan...', end=' ')
my_plan.print_plan()
print('Dad\'s plan...', end=' ')
dads_plan.print_plan()
print('Mom\'s plan...', end= ' ')
moms_plan.print_plan()

15
8/8.8/8.8.1/main.py Normal file
View File

@ -0,0 +1,15 @@
class CarRecord:
def __init__(self):
self.year_made = 0
self.car_vin = ''
# FIXME add __str__()
def __str__(self):
return'Year: {0}, VIN: {1}'.format(self.year_made, self.car_vin)
my_car = CarRecord()
my_car.year_made = int(input())
my_car.car_vin = input()
print(my_car)

28
8/8.9 LAB/main.py Normal file
View File

@ -0,0 +1,28 @@
class Car:
def __init__(self):
self.model_year = 0
self.purchase_price = 0
self.current_value = 0
def calc_current_value(self, current_year):
depreciation_rate = 0.15
# Car depreciation formula
car_age = current_year - self.model_year
self.current_value = round(self.purchase_price * (1 - depreciation_rate) ** car_age)
def print_info(self):
return """Car's information:
Model year: {0}
Purchase price: {1}
Current value: {2}""".format(self.model_year, self.purchase_price, self.current_value)
if __name__ == "__main__":
year = int(input())
price = int(input())
current_year = int(input())
my_car = Car()
my_car.model_year = year
my_car.purchase_price = price
my_car.calc_current_value(current_year)
print(my_car.print_info())

View File

@ -1,2 +0,0 @@
venv
inspectionProfiles

View File

@ -1,7 +0,0 @@
init:
pip install -r requirements.txt
test:
py.test tests
.PHONY: init test

View File

@ -1,138 +0,0 @@
import npyscreen
import sys
from Handler import Handler
class QuitButton(npyscreen.ButtonPress):
def whenPressed(self):
sys.exit(0)
class GameNavigator(npyscreen.FormBaseNew):
"""
This class handles all the drawing and 'graphics' of our game.
only basic logic like initial loading should happen here. re-drawing
and game logic should be done in Handler.py
TODO: Find a fix for initial room startup
TODO: Find a way to reset the cursor after a user hits sendButton
"""
def update_log(self, newline):
self.logList.append('> ' + newline) # Append the newline
self.logList = self.logList[-7:] # Truncate to only the last 5 lines
res = '' # Convert the list to a string
for element in self.logList:
res = res + str(element) + '\n'
res = res.upper() # Log is always uppercase
self.logBox.value = res # Set the logbox to that value
def update_location(self, location, art=None):
"""
This may not be needed in the future, dynamic
handling of location is something the navigator should do and should inherit from player.
"""
self.artBox.footer = location
if art != None:
self.artContent.value = art
else:
self.artContent.value = self.parentApp.gamelib['menu']['graphics']['not_found']
def update_inventory(self, items):
res = ''
for element in items:
res = res + str(element) + '\n'
res = res.upper() # Inventory is always uppercase
self.inventoryContent.value = res # Set the logbox to that value
def create(self):
top_division_height = 20
inventory_width = 20
art_width = 100
self.logList = []
self.artBox = self.add(npyscreen.BoxBasic,
name='ArtBox',
max_width=art_width,
max_height=top_division_height,
rely=2,
relx=inventory_width + 1,
editable=False)
self.artContent = self.add(npyscreen.MultiLineEdit,
rely=3,
relx=inventory_width + 2,
max_width=art_width - 2,
max_height=top_division_height - 2,
value=self.parentApp.gamelib['menu']['graphics']['start_to_continue'],
editable=False)
self.artBox.footer = 'Unknown Location'
self.inventoryBox = self.add(npyscreen.BoxBasic,
name='Inventory',
max_width=inventory_width,
max_height=top_division_height,
relx=1,
rely=2,
editable=False)
self.inventoryContent = self.add(npyscreen.MultiLineEdit,
max_width=inventory_width,
max_height=top_division_height,
relx=2,
rely=3,
value='------------------',
editable=False)
self.logBoxOutline = self.add(npyscreen.BoxBasic,
max_width=inventory_width + art_width,
max_height=9,
relx=1,
rely=top_division_height + 2,
editable=False)
self.logBox = self.add(npyscreen.MultiLineEdit,
max_width=inventory_width + art_width - 7,
max_height=7,
relx=2,
rely=top_division_height + 3,
editable=False)
self.dialogueBoxOutline = self.add(npyscreen.BoxBasic,
max_width=inventory_width + art_width,
max_height=3,
relx=1,
rely=top_division_height + 2 + 9,
editable=False)
self.dialogueBox = self.add(npyscreen.Textfield,
name='Type Here',
max_width=inventory_width + art_width - 14,
max_height=1,
relx=2,
rely=top_division_height + 3 + 9)
self.sendButton = self.add(Handler,
name="Send",
relx=inventory_width + art_width - 7,
rely=top_division_height + 3 + 9)
self.quitButton = self.add(QuitButton,
name="Quit",
relx=1,
rely=1)
"""
We've reached end of __init__ basicly by this point
its up to Handler.py to actually play the game, but we should
do some basic initalization here
"""
# TODO: load art from the last place the player was in
# TODO: load up inventory
# TODO: Expand this by loding the text from the game
# WARN: THIS MAY REQUIRE REWRITING HANDLER.PY TO INTALIZE THE ROOM OBJECT OUTSIDE OF HANDLER.PY
self.update_log('Welcome back! Try "LOOK AROUND" to get started.')
self.update_log(
'>>Note from joe: Welcome! you\'re playing the demo! Please dont mind text issues like |this| and *this*\ni have yet to implement color!')

View File

@ -1,171 +0,0 @@
import npyscreen
from yaml_parser import parse_datafile as parse
class Handler(npyscreen.ButtonPress):
"""
Very important, called when the player hits send, there are several things we need to do here:
1: handle the player's input, and run logic, this is done in handler.py
2: prepare new items to display on the screen
3: re-render the screen
"""
def localize_room(self, roomlocation):
"""
This method can re-localize the room.
"""
try:
room = parse(self.parent.parentApp.mainPath / 'gamedata/world' / roomlocation)['room']
# If the file could not be found
except FileNotFoundError:
# Log a critical error!
self.parent.parentApp.log.critical(
'Handler could not load the current room! Is the player file corrupt or was there a typo? Path was {0}'.format(
self.parent.parentApp.mainPath / 'gamedata/world' / roomlocation))
# Put the player in a blank room i forgot to finish
room = parse(self.parent.parentApp.mainPath / 'gamedata/world/blank_room.yaml')
return room
def whenPressed(self):
self.parent.parentApp.log.debug('Send button pressed!')
# This is the raw command from the user
raw_command = self.parent.dialogueBox.value.upper()
# Clear the dialogue box, TODO: This may become unneeded if issue #8 is fixed
self.parent.dialogueBox.value = ''
# This is the raw command from the user
parsed_command = raw_command.split()
try:
command = parsed_command.pop(0)
except IndexError:
self.parent.parentApp.log.warn(
'Command "{0}" could not be split, was it malformed or incomplete?'.format(raw_command))
command = ''
arguments = parsed_command # Whatever is left in the list, are arguments.
# Handle an empty command
if len(command) <= 2:
self.parent.update_log('Command was too short, try something like "MOVE", "LOOK AROUND" or "USE".')
else:
# Concatenate everything back together (just to show the user the program understood them correctly
self.parent.update_log(command + ' ' + ' '.join(str(s) for s in arguments))
"""
This is where real logic can happen!
"""
# Localize the player
player = self.parent.parentApp.player
room = self.localize_room(player.playerData['player']['location']) # Localize the room
# By now we should be situated in our room, and with our player.
# self.parent.parentApp.log.debug(room) # We dont need to log this, its too verbose!
# TODO: Should upgrade these to use fuzzy words library! and not direct comparisons!
if command == 'LOOK':
try:
if arguments[0] == 'AROUND':
try:
self.parent.update_log(room['look_around'])
except KeyError:
self.parent.update_log('There is nothing to look at?.. This might be a bug.')
if arguments[0] == 'AT':
try:
# Argument[1] is the "thing" you want to look at, yaml is lowercase so we lowercase it.
self.parent.update_log(room[arguments[1].lower()]['look_at'])
except KeyError:
self.parent.update_log("Im not sure what you're trying to look at.")
except IndexError:
self.parent.parentApp.log.error('Could not handle {0}, {1}'.format(command, arguments))
self.parent.update_log("You must specify something to look at.")
elif command in ['PICK', 'TAKE']:
try:
if arguments[0] == 'UP' or command in ['TAKE']:
if command in ['TAKE']:
arguments = ['UP'] + arguments # This is a messy way to fix take logic vs pick up logic but it works.
if len(arguments) <= 2: # If there are only 2 args ex:up, item then we dont need to merge that last arg
try:
# Argument[1] is the "thing" you want to pick up, yaml is lowercase so we lowercase it.
self.parent.parentApp.log.info('Player tried to pick up {0}'.format(arguments[1]))
self.parent.update_log(room[arguments[1].lower()]['pick_up'])
player.add_inventory(room[arguments[1].lower()]['item_name'])
except KeyError:
self.parent.update_log("You cant pick that up.")
else: # if its a longer list of args, the player prolly wants to pick up an item with multiple words, like hand_axe, or log_viewer
try:
long_arg = '_'.join(
arguments[1:]) # Joins whatever comes after 1 in our args with '_' between
self.parent.parentApp.log.info(
'Player tried to pick up long object {0}'.format(long_arg))
self.parent.update_log(room[long_arg.lower()]['pick_up'])
player.add_inventory(room[long_arg.lower()]['item_name'])
except KeyError:
self.parent.update_log("You cant pick that up.")
except IndexError:
self.parent.parentApp.log.error('Could not handle {0}, {1}'.format(command, arguments))
self.parent.update_log("You must specify something to pick up.")
elif command == 'OPEN':
try:
self.parent.parentApp.log.info('Player tried to open door: {0}'.format(arguments[0]))
new_room = room[arguments[0].lower()]['leads_to']
self.parent.parentApp.log.debug('New room is: {0}'.format(new_room))
upon_enter = player.change_room(new_room) # Change the player to that new room.
self.parent.update_log(upon_enter) # Print the new room upon enter text.
room = self.localize_room(player.playerData['player']['location']) # Re-Localize!
except KeyError:
self.parent.update_log("You cant open that.")
except IndexError:
self.parent.update_log("You must specify something to open")
elif command == 'INSPECT':
try:
self.parent.parentApp.log.info('Player inspecting: {0}'.format(arguments[0]))
self.parent.update_log(
room[arguments[0].lower()]['inspect']) # Prints the inspect text, if it exists
except KeyError:
self.parent.update_log("Nothing more to inspect here.")
except IndexError:
self.parent.update_log("You must specify something to inspect.")
elif command == 'START':
self.parent.update_log('Welcome to the game! Try to |LOOK AROUND|.')
else:
self.parent.parentApp.log.info('Player\'s command was not understood: {0}'.format(command))
self.parent.update_log('I didn\'t understand {0}'.format(command))
if command == 'WHERE':
# TODO: this should take the human readable room name, not the code-name
self.parent.update_log('You are in {0}.'.format(room))
# Log the command that we parsed
self.parent.parentApp.log.info('Parsed command "{0}" with arguments "{1}"'.format(command, arguments))
"""
Do a little bit of final setup, change the art if we
need to, change the text at the bottom and update the inventory.
"""
try:
self.parent.update_location(
room['name'],
room['art'])
except KeyError:
self.parent.update_location('Unknown Location')
self.parent.update_inventory(player.playerData['player']['inventory'])
# Make sure to re-draw the art box when we're all done (in case we updated it in logic above)
self.parent.artContent.display()
# Switch back to the game menu.
# TODO: possibly deprecate this statement?
self.parent.parentApp.switchForm('GAME')

View File

@ -1,21 +0,0 @@
import npyscreen
from Player import Player
class MainMenu(npyscreen.Form):
"""
This is the main menu, code here should only be for
initializing the player data and any settings they want to change
"""
def afterEditing(self):
# TODO: the game needs to happen after this inital main menu
self.parentApp.setNextForm('GAME')
def create(self):
self.add(npyscreen.FixedText, value='You cannot select a file yet! Just hit OK', editable=False)
self.playerSaveLocation = self.add(npyscreen.TitleFilenameCombo, name="Your save file:")
self.parentApp.player = Player(self.parentApp.mainPath / 'playerdata/defaults/default_player.yaml')
self.add(npyscreen.MultiLineEdit, value=self.parentApp.gamelib['menu']['graphics']['logo'], editable=False)

View File

@ -1,34 +0,0 @@
from yaml_parser import parse_datafile as parse
from errors import ItemAlreadyTaken
class Player:
"""
This class intended to abstract out the actual yaml data into a player.(item) that is more
friendly to handle in code.
"""
def __init__(self, save_location):
self.save_location = save_location
self.playerData = parse(save_location)
def change_room(self, new_room):
"""
Should move the player to a new room
TODO: Put a check here that checks if the room we're moving to exists!
"""
self.playerData['player']['location'] = new_room
room = self.playerData['player']['location']
return parse('adventure_game/gamedata/world/' + room)['room']['upon_enter']
def add_inventory(self, item):
if item in self.playerData['player']['inventory']:
raise ItemAlreadyTaken
else:
self.playerData['player']['inventory'].append(item)
def remove_inventory(self, item):
pass

View File

@ -1,83 +0,0 @@
import pathlib
import npyscreen
import logging
from npyscreen import NotEnoughSpaceForWidget
from os import system
from yaml_parser import parse_datafile as parse
from GameNavigator import GameNavigator
from MainMenu import MainMenu
class AlphaWarning(npyscreen.Popup):
def afterEditing(self):
self.parentApp.setNextForm('MENU')
def create(self):
self.add(npyscreen.MultiLineEdit, value="""Welcome to Unnamed Adventure game!
This game is still in ALPHA! And a TON
of features are not implemented.
Please check out the git project for
details and updates! and please report
any bugs! Thank you and enjoy!
https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/issues""",
editable=False)
class AdventureGame(npyscreen.NPSAppManaged):
"""
This is the 'root' of the entire game!
"""
# Do on creation
def onStart(self):
# Setup some important 'global' values we'll need later
# Set the path all other files will follow
self.mainPath = pathlib.Path(__file__).parent
# Setup logging
self.log = logging
self.log.basicConfig(filename=self.mainPath / 'logs/AdventureGame.log',
filemode='w',
level=logging.DEBUG)
self.log.info('Logging started!')
# parse this data first (since it includes graphics for the main menu
self.gamelib = parse(self.mainPath / 'gamedata/gamelib.yaml')
self.log.debug('Gamelib at {0}'.format(self.mainPath / 'gamedata/gamelib.yaml'))
# Intalize the player as none, the player will be created in the main menu.
self.player = None
# Set screen size before drawing windows
dimensions = self.gamelib['menu']['graphics']['dimensions']
#system('mode con: cols={0} lines={1}'.format(
# dimensions['inventory_width']+dimensions['art_width'],
# 30)) # TODO: Finish setting this up.
# Set theme
#TODO: modify custom theme?
npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
# Draw game windows
self.addForm('GAME', GameNavigator, name='Unnamed Adventure Game') # This window should draw the actual game
self.addForm('MENU', MainMenu, name='Welcome to the main menu') # This window should draw the main menu
self.addForm('MAIN', AlphaWarning, name='Welcome to the alpha!') # This window is only needed for the ALPHA
# TODO: Create a 'splash screen' or, traditional "main menu"
if __name__ == '__main__':
# Set the screen size bigger
system('mode con: cols={0} lines={1}'.format(124, 36))
# Make a new adventure game if not imported
adventure_game = AdventureGame()
# Run the game!
try:
adventure_game.run()
except NotEnoughSpaceForWidget:
# This exception should catch if a player tries to play in a screen that is too small.
print('Your screen is too small!\nOr, Joe has not fixed https://kitsunehosting.net/gitea/Kenwood/SNHU-IT-140/issues/7')

View File

@ -1,6 +0,0 @@
class ItemAlreadyTaken(Exception):
pass
class ItemRequired(Exception):
pass

View File

@ -1,62 +0,0 @@
menu:
graphics:
logo: |
. __ __ __ ___ __ __
/ / / /___ ____ ____ _____ ___ ___ ____/ / / | ____/ / _____ ____ / /___ __________
/ / / / __ \/ __ \/ __ `/ __ `__ \/ _ \/ __ / / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \
/ /_/ / / / / / / / /_/ / / / / / / __/ /_/ / / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/
\____/_/ /_/_/ /_/\__,_/_/ /_/ /_/\___/\__,_/ /_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/
_________ __ _________
/ ____/ | / |/ / ____/
/ / __/ /| | / /|_/ / __/
/ /_/ / ___ |/ / / / /___
\____/_/ |_/_/ /_/_____/
not_found: |
+--------------------------------------------------------------------------------NNN0ddk0000kkX--+
|--------------------------------------------------------------------------------N0OOkkkO0OkxON--|
|--------------------------------------------------------------------------------KkOkkkxkOxloON--|
|--------------------------------------------------------------------------------0xOO00000kdokX--|
|---------------------------------------------+/ \+-----------------------------XOxdddxdl:;cdX--|
|--------------------------------------------+/ !! \+----------------------------XOxoldxllc:oON--|
|-------------------------------------------+/ \+---------------------------0xkddkxdOxod0W--|
|------------------------------------+No Art for this location+------------------XkddkxodkxkxxX--|
|--------------------------------|Consider making a pull request?|---------NXXXKOOkxxxddodxkkOX--|
|--------------------------------------------------------------------------NXNNXxclddxkkxkOOO0N--|
|--------------------------------------------------------------------------XkxxxdddoxkkxkOkxkKW--|
|--------------------------------------------------------------------------KxxxxdollloodO0kkk0N--|
|--------------------------------------------------------------------------XkxxxdlclddkOOkk0OON--|
|--------------------------------------------------------------------------N0dooxdlcdkOkkkkxcoX--|
|--------------------------------------------------------------------------WXKKKKOOO0K0kxxxdodX--|
|------------------------------------------------------------------------------------------------|
|------------------------------------------------------------------------------------------------|
+------------------------------------------------------------------------------------------------+
start_to_continue: |
+ +
| |
| TYPE |
| START |
| TO BEGIN! |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+ +
dimensions:
inventory_width: 23
inventory_height: 20
art_width: 101
art_height: 20
dialogue_width: 122
dialogue_height: 20
entry_box_width: 122
entry_box_height: 3

View File

@ -1,4 +0,0 @@
room:
grid: [-1, -1]
upon_enter: "You're in a blank room. It looks unfinished, like joe forgot to put something here"
look_around: "There is nothing to look at, you should tell joe you're here."

View File

@ -1,20 +0,0 @@
room:
name: "The Hallway"
grid: [0, 1]
upon_enter: "You are standing just outside your office door."
look_around: "You look up, and down the hallway, you see the receptionists |desk|. A |closet| at the other end of the hall and the |Office Door| Behind you."
closet:
look_at: "Its a closet door."
inspect: "Its still a closet door."
desk:
look_at: "Its your receptionists desk, she's not sitting behind it."
inspect: "She's still not there."
office_door:
leads_to: office.yaml
look_at: "Its a door, it leads to your office. You should try to |OPEN| it."
inspect: "Its ornate but basic, this side of the door has your name on a |plaque|."
plaque:
item_name: "Office Door Plaque"
look_at: "Its a small brass plate, it has your name on it."
inspect: "Its still a small brass plate, and it has your name on it. Beyond that its nothing special."
pick_up: "You tear off the *PLAQUE*, and now you're stuck with it i guess."

View File

@ -1,39 +0,0 @@
room:
name: "Your Office"
grid: [0, 0]
upon_enter: "You are standing behind your desk, you see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|"
look_around: "You look around the room, you see a |DESK|, a |BOOKSHELF| and the |DOOR|"
desk:
look_at: "You move to stand behind your desk. You see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|"
inspect: "The desk is large and ornate with one of those silly lamps hovering over it."
bookshelf:
look_at: "The bookshelf is a bookshelf."
inspect: "Its still a bookshelf."
log_viewer:
item_name: "Log Viewer"
look_at: "The log viewer is a small piece of ornate code, allowing you to examine |entities| more closely."
inspect: "The dials are wiggly and the viewer makes Beep Boop sounds sometimes."
pick_up: "You pick up the *LOG VIEWER*."
door:
leads_to: hallway.yaml
look_at: "Its a door, it leads to the Hallway. You should try to |OPEN| it."
inspect: "Its ornate but basic, the other side of the door has your name on a plaque."
art: |
+ +
| |
| OFFICE STUFF? |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+ +

View File

@ -1,14 +0,0 @@
INFO:root:Logging started!
DEBUG:root:Gamelib at adventure_game\gamedata\gamelib.yaml
DEBUG:root:Send button pressed!
DEBUG:root:{'grid': [0, 0], 'upon_enter': 'You are standing behind your desk, you see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'look_around': 'You look around the room, you see a |DESK|, a |BOOKSHELF| and the |DOOR|', 'pick_up_logviewer': 'You pick the *LOG VIEWER* up.', 'desk': {'look_at': 'You move to stand behind your desk. You see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'inspect': 'Desk, ornate, stuff'}, 'log_viewer': {'look_at': 'logviewer looks like garbo', 'inspect': 'beep boop', 'pick_up': 'You pick up the *LOG VIEWER*.'}}
INFO:root:Parsed command "LOOK" with arguments "['AROUND']"
DEBUG:root:Send button pressed!
DEBUG:root:{'grid': [0, 0], 'upon_enter': 'You are standing behind your desk, you see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'look_around': 'You look around the room, you see a |DESK|, a |BOOKSHELF| and the |DOOR|', 'pick_up_logviewer': 'You pick the *LOG VIEWER* up.', 'desk': {'look_at': 'You move to stand behind your desk. You see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'inspect': 'Desk, ornate, stuff'}, 'log_viewer': {'look_at': 'logviewer looks like garbo', 'inspect': 'beep boop', 'pick_up': 'You pick up the *LOG VIEWER*.'}}
INFO:root:Parsed command "LOOK" with arguments "['AT', 'DESK']"
DEBUG:root:Send button pressed!
DEBUG:root:{'grid': [0, 0], 'upon_enter': 'You are standing behind your desk, you see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'look_around': 'You look around the room, you see a |DESK|, a |BOOKSHELF| and the |DOOR|', 'pick_up_logviewer': 'You pick the *LOG VIEWER* up.', 'desk': {'look_at': 'You move to stand behind your desk. You see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'inspect': 'Desk, ornate, stuff'}, 'log_viewer': {'look_at': 'logviewer looks like garbo', 'inspect': 'beep boop', 'pick_up': 'You pick up the *LOG VIEWER*.'}}
INFO:root:Parsed command "LOOK" with arguments "['AT', 'DOOR']"
DEBUG:root:Send button pressed!
DEBUG:root:{'grid': [0, 0], 'upon_enter': 'You are standing behind your desk, you see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'look_around': 'You look around the room, you see a |DESK|, a |BOOKSHELF| and the |DOOR|', 'pick_up_logviewer': 'You pick the *LOG VIEWER* up.', 'desk': {'look_at': 'You move to stand behind your desk. You see a |NAMEPLATE|, a |TAPE RECORDER| and your trusty |LOG VIEWER|', 'inspect': 'Desk, ornate, stuff'}, 'log_viewer': {'look_at': 'logviewer looks like garbo', 'inspect': 'beep boop', 'pick_up': 'You pick up the *LOG VIEWER*.'}}
INFO:root:Parsed command "LOOK" with arguments "['AT', 'BOOKSHELF']"

View File

@ -1,4 +0,0 @@
player:
name: 'Default'
location: 'office.yaml'
inventory: ['Detective Hat']

View File

@ -1,12 +0,0 @@
import yaml
def parse_datafile(file):
# With the file open
with open(file, 'r') as stream:
# Try to read it and return it
try:
content = yaml.safe_load(stream)
return content
except yaml.YAMLError as exc:
return exc

View File

@ -1,2 +0,0 @@
npyscreen~=4.10.5
PyYAML~=5.1.2