Python Forum
I need a win! (HELP!) PLZ?
Thread Rating:
  • 3 Vote(s) - 2.33 Average
  • 1
  • 2
  • 3
  • 4
  • 5
I need a win! (HELP!) PLZ?
#1
Am I doing this right or am I more lost than I think I am.....
This is my first time coding in Python and this is the most I can come up with after 4 hours of research and divining the heavens.... lol

import os
import inspect
import sys

def main():
   sandbox()

   def game_over():
       print("I sense a disturbance in the code")
       os._exit(1)
       print('The code is strong in this one')

   def win():
       # TODO fail_if_not_called_from_line_8()
       print(SKULLCAP)
   game_over()
   win()

# This file is a coding exercise. Please follow the instructions explicitly -
# you may only write code where specified. We've included reference material
# with information to produce a working solution. 
#
#
# Instructions:
# Using python 3 and only writing code where indicated (inside the sandbox function), 
# make this program execute the last line of game_over and all of the win function.
# It should output: 
#  'This code is strong in this one'
#  Followed by the SKULLCAP logo



def sandbox():
   #####################################################
   # Begin sandbox
   # you can only code in this sandbox
   #####################################################
  def tracefunc(frame, event, arg, indent=[0]):
     if event == "call":
         indent[0] += 2 
         if frame.f_code.co_name == 'win':
            func = frame
            print(func.f_code.co_name)
         print ("-" * indent[0] + "> call function", frame.f_code.co_name)
     elif event == "return":
         print ("<" + "-" * indent[0], "exit function", frame.f_code.co_name)
         indent[0] -= 2
     return tracefunc

   sys.settrace(tracefunc)    
   pass
   #####################################################
   # End sandbox
   #####################################################


SKULLCAP= """
                           __xxxxxxxxxxxxxxxx___.
                       _gxXXXXXXXXXXXXXXXXXXXXXXXX!x_
                  __x!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!x_
               ,gXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx_
             ,gXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!_
           _!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!.
         gXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs
       ,!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!.
      g!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
     iXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
    ,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
    !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
  ,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
  !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXi
 dXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  XXXXXXXXXXXXXXXXXXXf~~~VXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvXXXXXXXXXXXXXX!
  !XXXXXXXXXXXXXXXf`         'XXXXXXXXXXXXXXXXXXXXXf`          '~XXXXXXXXXXP
   vXXXXXXXXXXXX!                  !XXXXXXXXXXXXXXXXXX!              !XXXXXXXXX
    XXXXXXXXXXv`                      'VXXXXXXXXXXXXXXX                !XXXXXXXX!
    !XXXXXXXXX.                           YXXXXXXXXXXXXX!                XXXXXXXXX
     XXXXXXXXX!                          ,XXXXXXXXXXXXXX                VXXXXXXX!
     'XXXXXXXX!                           ,!XXXX ~~XXXXXXX               iXXXXXX~
      'XXXXXXXX                           ,XXXXXX     XXXXXXXX!             xXXXXXX!
       !XXXXXXX!xxxxxxs______xXXXXXXX        'YXXXXXX!          ,xXXXXXXXX
        YXXXXXXXXXXXXXXXXXXXXXXXXXXX`       VXXXXXXX!s. __gxx!XXXXXXXXXP
         XXXXXXXXXXXXXXXXXXXXXXXXXX!           'XXXXXXXXXXXXXXXXXXXXXXXXX!
         XXXXXXXXXXXXXXXXXXXXXXXXXP              'YXXXXXXXXXXXXXXXXXXXXXXX!
         XXXXXXXXXXXXXXXXXXXXXXXX!     i            !XXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXX!     XX       !XXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXXx_   iXX_,_dXXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXP
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
          ~vXvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXf
                   'VXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvv~
                     'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX~
                 _    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv`
                -XX!  !XXXXXXX~XXXXXXXXXXXXXXXXXXXXXX~   Xxi
                 YXX  '~ XXXXX XXXXXXXXXXXXXXXXXXXX`     iXX`
                 !XX!    !XXX` XXXXXXXXXXXXXXXXXXXX      !XX
                 !XXX    '~Vf  YXXXXXXXXXXXXXP YXXX     !XXX
                 !XXX  ,_      !XXP YXXXfXXXX!  XXX     XXXV
                 !XXX !XX           'XXP 'YXX!       ,.!XXX!
                 !XXXi!XP  XX.                  ,_  !XXXXXX!
                 iXXXx X!  XX! !Xx.  ,.     xs.,XXi !XXXXXXf
                  XXXXXXXXXXXXXXXXX! _!XXx  dXXXXXXX.iXXXXXX
                  VXXXXXXXXXXXXXXXXXXXXXXXxxXXXXXXXXXXXXXXX!
                  YXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXV
                   'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
                   'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXf
                      VXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXf
                        VXXXXXXXXXXXXXXXXXXXXXXXXXXXXv`
                         ~vXXXXXXXXXXXXXXXXXXXXXXXf`
                             ~vXXXXXXXXXXXXXXXXv~
                                '~VvXXXXXXXV~~
                                      ~~                                  

"""
if __name__ == '__main__':
   main()
Reply
#2
Does it work? What output do you currently get?
Reply
#3
I currently only get it to display what it is doing in the background and still get it to only get game over....
I don't understand how to get to os.exit
Reply
#4
What are you trying to do, exactly? Why are you defining functions within functions? Why are you setting a trace function?
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
(Jul-06-2017, 10:02 PM)ichabod801 Wrote: What are you trying to do, exactly? Why are you defining functions within functions? Why are you setting a trace function?

It looks like the assignment (only put code here!) is to re-write the inner function so it skips certain lines, specifically, to avoid the os.exit() call.
Reply
#6
(Jul-06-2017, 10:06 PM)nilamo Wrote: only put code here!

Ah, I see. Missed that part.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#7
These are the references I was given for the project.

So am I suppose to use the pdb to bypass the os.exit as I am new to what that is?

https://docs.python.org/3.6/library/insp...eter-stack
https://docs.python.org/3/library/sys.html#sys.settrace
https://github.com/python/cpython/blob/3.6/Lib/pdb.py
Reply
#8
Are there any rules as to what you can/can't do?  You could just re-bind os._exit so it does nothing...
>>> import os
>>> def run_me():
...     print("spam")
...     os._exit(1)
...     print("shouldn't happen")
...
>>> def main():
...     exit = os._exit
...     os._exit = lambda status: None
...     run_me()
...     os._exit = exit
...
>>> main()
spam
shouldn't happen
Reply
#9
I have to run run_me() skip print("spam") and os._exit() in order to print ("shouldn't happen") and run main() and print ("I ran")

import os
>>> def run_me():
... print("spam")
... os._exit(1)
... print("shouldn't happen")
...
>>> def main():
... exit = os._exit
... os._exit = lambda status: None
... run_me()
... os._exit = exit
... print("I ran")

>>> main()

spam
shouldn't happen

I am just having a hard time figuring out how to skip the first print line and os._exit so I can get win() to run.
Reply
#10
(Jul-07-2017, 05:36 PM)nilamo Wrote: Are there any rules as to what you can/can't do?
...because you can also override print() the same way...
Reply


Forum Jump:

User Panel Messages

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