Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adventure/more volgorde van items maakt uit #3

Open
Jelleas opened this issue Dec 11, 2019 · 4 comments
Open

Adventure/more volgorde van items maakt uit #3

Jelleas opened this issue Dec 11, 2019 · 4 comments
Assignees

Comments

@Jelleas
Copy link
Contributor

Jelleas commented Dec 11, 2019

Een uitwerking had

self.items = set()

Waardoor de volgorde van uitprinten kan verschillen, en dat deed het ook tussen check50, de IDE, en onze grading server.

We kunnen daardoor bij https://github.com/minprog/cs50x/blob/031ea998e34049ee3e5caf3828fa9f3fc2dee622/adventure/more/__init__.py#L32-L35 niet vertrouwen op de volgorde van printen. Waarschijnlijk is output = check.stdout() en vervolgens handmatig checken een beter idee.

@bjorn-out bjorn-out self-assigned this Dec 11, 2019
@bjorn-out
Copy link
Contributor

Ik heb geprobeerd je suggestie te implementeren, echter resulteert output = check.stdout() bij deze opdracht altijd in een check50.Failure en geen output. Dit komt omdat stdout() blijkbaar probeert alle output totdat het programma afsluit te verzamelen. Adventure sluit niet af in ruimte 3, en dus timed stdout() altijd uit. Als dit gebeurt verzamelt hij helaas ook geen enkele output in de variabele (anders had het nog wel mogelijk geweest de exception zelf af te vangen en de output gewoon te gebruiken).

Is dit iets wat mogelijk in check50 zelf aangepast moet worden? Het lijkt me wel ontzettend handig om ook alle output op te kunnen vangen van een niet-afsluitend programma. Anders moeten we wellicht aangeven dat de volgorde niet mag veranderen t.o.v. de dataset.

@bjorn-out
Copy link
Contributor

Nog even extra ter illustratie. Met onderstaande check code:

import check50

@check50.check()
def test():
    output = ''
    try:
        output = check50.run("python test.py").stdout()
    except check50.Failure:
        pass

    check50.log(output)

En onderstaande test.py:

while True:
    print('Hello, world!')

Krijg ik onderstaande output:
Screenshot 2019-12-12 at 02 12 50

Ik zou verwachten 3 seconden aan 'Hello, world!' in de output te hebben, maar helaas, hij blijft leeg.

@Jelleas
Copy link
Contributor Author

Jelleas commented Dec 12, 2019

"Is dit iets wat mogelijk in check50 zelf aangepast moet worden? Het lijkt me wel ontzettend handig om ook alle output op te kunnen vangen van een niet-afsluitend programma. Anders moeten we wellicht aangeven dat de volgorde niet mag veranderen t.o.v. de dataset." Yup! Maak hiervoor even een Engelstalige issue aan bij cs50: https://github.com/cs50/check50 (of evt. een pr als je een ideetje hebt :)

Wat we wel kunnen doen is het spel stoppen d.m.v. .stdin("quit"), dan kunnen we wel alle output opvangen.

@bjorn-out
Copy link
Contributor

Ik heb het nog even geprobeerd met .stdin("quit"), maar dit resulteert ook in geen output, of ik dit nu vóór of na de .stdout() aanroep. Komende week zal ik even kijken of ik er zelf iets van kan maken in check50, anders maak ik een issue aan.

@stgm stgm transferred this issue from minprog/cs50x Jun 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants