Python Forum

Full Version: Making a hotel filled with people categorizing them
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello forum,

so I've been trying to learn python by myself and made up an exercise that I can't handle.

I've been trying to populate a hotel (i.e. list) with a random amount of people (i.e. objects) with 3 attributes (origin, age, gender). I think that part worked. But now I want to categorize them. Namely, I want to count the number of people that are underage (<18) and how many among those are male or female.

I might be messing up the indentation but I don't know.

Thanks for your help in advance!

Best regards,
Lucas

This is my code so far:
import random
guestsUnderage = 0
guestsUnderageMale = 0
guestsUnderageFemale = 0
guestsAdults = 0

class Tenant:
    def __init__(self, origin, age, gender):
        self.origin = origin
        self.age = age
        self.gender = gender
    
    def __str__(self):
        return '\nOrigin: ' + self.origin + '\nAge: ' + str(self.age) + '\nGender: ' + self.gender
    
origins = ['Europe', 'Africa', 'Americas', 'Asia', 'Australia']
ages = range(10,70)
genders = ['male', 'female']


hotel = []

for i in range(random.randint(20,40)): #random number of rooms between 20 and 40
    tenanti = Tenant(origins[random.randint(0, len(origins) - 1)], str(ages[random.randint(0, len(ages) - 1)]), genders[random.randint(0, len(genders)-1)])

    hotel.append(tenanti)

for i in range(len(hotel)):
    if int(tenanti.age) < 18:
        guestsUnderage += 1
        if tenanti.gender == 'male':
           guestsUnderageMale += 1
        else:
            guestsUnderageFemale += 1
    else:
        guestsAdults += 1
    
print(guestsUnderage,guestsUnderageFemale, guestsUnderageMale,guestsAdults)
This works for me:

#! /usr/bin/env python3
import random
guestsUnderage = 0
guestsUnderageMale = 0
guestsUnderageFemale = 0
guestsAdults = 0

class Tenant:
    def __init__(self, origin, age, gender):
        self.origin = origin
        self.age = age
        self.gender = gender

    def __str__(self):
        return '\nOrigin: ' + self.origin + '\nAge: ' + str(self.age) + '\nGender: ' + self.gender

origins = ['Europe', 'Africa', 'Americas', 'Asia', 'Australia']
ages = range(10,70)
genders = ['male', 'female']


hotel = []

for i in range(random.randint(20,40)): #random number of rooms between 20 and 40
    tenanti = Tenant(origins[random.randint(0, len(origins) - 1)], str(ages[random.randint(0, len(ages) - 1)]), genders[random.randint(0, len(genders)-1)])

    hotel.append(tenanti)

for guest in hotel:
    if int(guest.age) < 18:
        guestsUnderage += 1

        if guest.gender == 'male':
            guestsUnderageMale += 1
        else:
            guestsUnderageFemale += 1
    else:
        guestsAdults += 1

print(f'Guest Underage: {guestsUnderage},\nFemale Underage: {guestsUnderageFemale}, \nMale Underage: {guestsUnderageMale}, \nAdults: {guestsAdults}')
Output:
Guest Underage: 4, Female Underage: 3, Male Underage: 1, Adults: 26
Watch your indentation. Do you only want to count the gender of underage guests? If not, why is the gender test more deeply indented than the age test?
(Jan-08-2022, 06:05 PM)deanhystad Wrote: [ -> ]Watch your indentation. Do you only want to count the gender of underage guests? If not, why is the gender test more deeply indented than the age test?

Yes, exactly. For the purposes of my exercise I wanted to exclusively count the gender of underage guests.
(Jan-08-2022, 06:04 PM)menator01 Wrote: [ -> ]This works for me:

Awesome! Thank you so much. This worked perfectly. Sorry for the late reply, I could have sworn I had already answered you.