2017-01-22 5 views
0

Ich versuche, ein Tippspiel zu schreiben, aber ich bekomme immer wieder zufällige Fehler und finde nicht, was ich falsch mache. Hier ist das Skript:Berechtigungsfehler. Was ist los mit dir?

import random 
import sys 
import os 

def guess_number(): 
    file = open('highscores.txt', 'r+')#opens file 
    highscore = file.read() 
    highscore = int(highscore) 
    name = input('Enter your name: ') 

    answer = random.randint(1,100) 
    print('Hi ' + name + '! I\'m thinking of a number between 1 and 100!') 
    guesses = 0 
    while guesses < 100: 
     print('Take a Guess! ') 
     guess = input() 
     guess = int(guess) 

     if guess < answer: 
      print('Your guess was too low!') 
      guesses = guesses + 1 
     if guess > answer: 
      print('Your guess was too High!') 
      guesses = guesses + 1 
     if guess == answer: 
      guesses = guesses + 1 
      break 

    if guess == answer: 
     answer = str(answer) 
     guesses = str(guesses) 



     print('Good Job ' + name + '! You guessed ' + answer + ' in ' +  guesses + ' guesses!') 
     guesses = int(guesses) 
    if highscore > guesses: 
     file.close() 
     os.remove('highscores.txt') 
     file = open('highscores.txt', "w") 
     print('Congratulations! You beat the highscore!') 
     guesses = str(guesses) 
     file.write(guesses) 
     file.close() 
     guesses = int(guesses) 
    elif highscore < guesses: 
     highscore = str(highscore) 
     print('The highscore is: ' + highscore) 

By the way, ich habe eine separate Datei mit dem Namen highscores.txt; Wenn das Programm zum ersten Mal läuft, tippe ich "100" in die Datei und speichere es.

Hier ist die Rückverfolgung des Fehlers ich:

Traceback (most recent call last): 
    File "<pyshell#8>", line 1, in <module> 
    guess_number() 
    File "C:\Users\rhino_000\Desktop\guesses\guesses.py", line 39, in guess_number 
    os.remove('highscores.txt') 
PermissionError: [WinError 32] The process cannot access the file because it  is being used by another process: 'highscores.txt' 
+0

Welche Fehler erhalten Sie, die ** ** Zurückverfolgungs bitte geben. –

+0

"aber ich bekomme immer zufällige Fehler" Können Sie ein bisschen genauer sein? – Tagc

+1

@WillemVanOnsem Jeder Kommentar, den Sie schreiben, schreibe ich 0,5 Sekunden später. :) – Tagc

Antwort

0

Die Antwort auf diese Frage ist, dass Sie die Datei erneut, bevor Sie schließen sollten. Eine einfache Möglichkeit, dies in Python zu tun, ist die Verwendung der with Syntax.

with open('qwerty.txt', 'r') as f: 
    content = f.read() 

# File is automatically closed now. 
print(content) 

Das Problem ist sehr wahrscheinlich, dass Sie das Programm mehrmals hintereinander laufen, aber das elif Teil schließt nicht die Datei und die Datei wird nicht auf OS-Ebene geschlossen, wenn das Programm beendet. Sie sollten die Datei in Python immer schließen, um solche Hänger nicht im System zu erhalten.

+0

Kann ich nur file.close() verwenden? –

+1

@ RianO'Hanlon Ja, Sie können, aber dann müssen Sie es zu jedem möglichen Pfad hinzufügen, wo das Programm gehen kann. Sie müssen auch bedenken, dass wenn der Code mit einer Ausnahme beendet wird und nicht Ihre 'close()' erreicht, Sie immer noch einen Aufhänger im System bekommen, der Ihren nächsten Code-run aufhebt. Daher wird empfohlen, die "mit" -Syntax zu verwenden. – makaveli

0

Dies baut auf Makavelis Antwort und dem Kommentar auf, den ich oben gepostet habe. Der folgende Code scheint alle Dateisystemzugriffsprobleme zu beheben. Ich habe das Spiel über mehrere Läufe getestet und es scheint gut zu funktionieren.

import random 


def guess_number(): 
    with open('highscores.txt', 'r+') as f: 
     highscore = int(f.read()) 

    name = input('Enter your name: ') 

    answer = random.randint(1, 100) 
    print('Hi ' + name + '! I\'m thinking of a number between 1 and 100!') 
    guesses = 0 
    while guesses < 100: 
     print('Take a Guess! ') 
     guess = input() 
     guess = int(guess) 

     if guess < answer: 
      print('Your guess was too low!') 
      guesses = guesses + 1 
     if guess > answer: 
      print('Your guess was too High!') 
      guesses = guesses + 1 
     if guess == answer: 
      guesses = guesses + 1 
      break 

    if guess == answer: 
     answer = str(answer) 
     guesses = str(guesses) 

     print('Good Job ' + name + '! You guessed ' + answer + ' in ' + guesses + ' guesses!') 
     guesses = int(guesses) 
    if highscore > guesses: 
     print('Congratulations! You beat the highscore!') 
     with open('highscores.txt', "w") as f: 
      guesses = str(guesses) 
      f.write(guesses) 
    elif highscore < guesses: 
     highscore = str(highscore) 
     print('The highscore is: ' + highscore) 


guess_number() 

Beispiel Run

Im Folgenden ist ein Beispiel für eine der Testläufe ich. Bevor ich den Test lief, enthielt highscores.txt 9 (von einem vorherigen Lauf) und nach dem Lauf enthielt es 6.

Enter your name: tagc 
Hi tagc! I'm thinking of a number between 1 and 100! 
Take a Guess! 
50 
Your guess was too High! 
Take a Guess! 
25 
Your guess was too low! 
Take a Guess! 
37 
Your guess was too low! 
Take a Guess! 
44 
Your guess was too High! 
Take a Guess! 
40 
Your guess was too High! 
Take a Guess! 
38 
Good Job tagc! You guessed 38 in 6 guesses! 
Congratulations! You beat the highscore! 
+0

-1 um alles für ihn zu tun, damit er nicht alles tippen und lernen muss. +1 zum Testen der Antwort ... Ich war faul. :) – makaveli

+0

@makaveli Konnte nicht widerstehen. 90% des Grundes, warum ich es repariert habe, war, weil mir langweilig war und einfache Ratespiele wie diese mich unterhalten. :) – Tagc

Verwandte Themen