עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

פורסם

יש לי קוד פייתון תקול: 1. למה לאחר שאני עושה הרשמה או כניסה- מוחזרת לי שגיאה 500?

2. למה קובץ ה-JSON לא נוצר ולא שומר את המשתמש הנוכחי? ואם הוא כן שומר- שומר לי כל פעם רק על השחקן הנוכחי ודורס את כל השחקנים?

3. למה כשנשמרים שחקנים חדשים בקובץ ה-JSON הם נשמרים ללא הפרמטר של COUNT_WIN, וכתוצאה מכך נוצר לי אובייקט לא שלם? (אני חושבת שזה גורם להרבה שגיאות) 4. למה כשאני רוצה שחק לאחר הרשמה או כניסה עדיין מופיעה לי ההודעה שאני צריכה לעשות log_in?

5. מיד כשאני מריצה את הלקוח מופיעה לי השגיאה הבאה: הקובץ לא נמצא או שהוא ריק

— ניסיתי להכניס את הקובץ שלי מספר פעמים לבינה מלאכותית בשביל שתפתור לי את הבעיות, אך זה לא עזר.

— אני מאד אשמח אם תוכלו לעזור לי. תודה מראש!

להלן הקוד שלי:

class User:
    def __init__(self, userName, id, password, countWin=0, countTimes=0, words=None):
        self.userName = userName
        self.id = id
        self.password = password
        self.countTimes = countTimes
        self.words = words if words else set()
        self.countWin = countWin

    def __str__(self):
        return (f"userName: {self.userName}; id: {self.id}; password: {self.password};"
                f"countTimes: {self.countTimes}; words: {self.words}; countWin: {self.countWin};")

from flask import Flask, request, jsonify, abort, make_response, session
from flask_cors import CORS
from User import User
import json
import random
import os
import time

# תיעוד קוד

app = Flask(__name__)
CORS(app, supports_credentials=True)

usersFile = 'Users.json'


#  טעינת משתמשים מקובץ ה- JSON
def load_users():
    """Load users from the JSON file."""
    try:
        if not os.path.exists(usersFile) or os.path.getsize(usersFile) == 0:
            print("The file users.json is missing or empty.")
            return []

        with open(usersFile, 'r') as file:
            data = json.load(file)
            # !!! וידוא שמבנה הקובץ תקין !!!
            if not isinstance(data, list):
                print("Error: Invalid JSON structure in users.json.")
                return []
            print(data)
            return [User(**user) for user in data]  # קריאת ה-JSON והמרה לאובייקטים של משתמשים

    except FileNotFoundError:
        print("File not found. Initializing with an empty list.")
        return []
        # return {}
    except json.JSONDecodeError as e:  # כאן מודיעים על שגיאה עם קובץ JSON
        print(f"Error decoding JSON: {e}")
        return []
        # return {}


#  רשימת המשתמשים
users = load_users()

#  משתמש נוכחי
# currentUser: User = None
# global currentUser
currentUser = None


#  שמירת משתמשים לקובץ ה- JSON
@app.route('/save_users', methods=['POST'])
def save_users():
    """Save users to the JSON file."""
    try:
        with open(usersFile, 'w') as file:
            # json.dump([user.__dict__ for user in users], file)  # , ensure_ascii=False)
            # print(currentUser.__dict__)
            # print(currentUser.__dict__, file)
            print(users.__str__())
            json.dump([user.__dict__ for user in users], file, ensure_ascii=False,
                      indent=4)  # שמירת כל המשתמשים בקובץ בפורמט יפה
            print("Users saved successfully!")
            print(file.readlines())
    except Exception as e:
        print(f"Error saving users: {e}")
        abort(500)  # !!!!! שגיאה 500 עם הדפסת הסיבה


#  הרשמה
@app.route('/register', methods=['POST'])
def register():
    # data = request.json
    global currentUser
    currentUser = None

    # !!!! הוספת טיפול בשגיאות בעת גישה ל-JSON או session
    try:
        data = request.json
        # !!! בדיקה אם קלט לא תקין !!!
        if not data or 'userName' not in data or 'password' not in data:
            return jsonify({"message": "Invalid input data"}), 400

    except Exception as e:
        print(f"Error processing request: {e}")
        abort(500)

    users = load_users()
    # !!! בדיקה אם המשתמש כבר קיים !!!
    if any(user.userName == data['userName'] for user in users):
        return jsonify({"message": "User already exists."})

    _id = len(users) + 1
    new_user = User(data['userName'], _id, data['password'])
    print(new_user.__str__())
    response = make_response(jsonify({"message": "sign in successfully."}))
    response.set_cookie("userId", str(new_user.id), max_age=600, httponly=True, secure=False, samesite='None')
    session['userName'] = new_user.userName
    print(f"Hello {new_user.userName}")
    users.append(new_user)
    currentUser = new_user
    save_users()  # שמירת המשתמשים לאחר הוספת המשתמש החדש
    # global currentUser
    # print(f"Hello {data['userName']}")
    # return jsonify({"message": "User registered successfully."})
    return response


#  התחברות
@app.route('/logIn', methods=['POST'])
def logIn():
    # data = request.json
    # # userName = data['userName']
    # # password = data['password']
    # if not data.get('userName') or not data.get('password'):
    #     return jsonify({"message": "Invalid input data."})
    # !!!! ודא שהמשתנה 'currentUser' מאותחל בעת ההרשמה או הכניסה
    global currentUser
    currentUser = None

    # !!!! הוספת טיפול בשגיאות בעת גישה ל-JSON או session
    try:
        data = request.get_json()
        # !!! בדיקה אם קלט לא תקין !!!
        if not data or 'userName' not in data or 'password' not in data:
            return jsonify({"message": "Invalid input data"}), 400

    except Exception as e:
        print(f"Error processing request: {e}")
        abort(500)

    # userName = data.get('userName')
    # password = data.get('password')
    # for i in users:
    #     if i.userName == userName and i.password == password:
    #         response = make_response(jsonify({"message": "logIn successfully."}))
    #         response.set_cookie("userId", str(i.id), max_age=600, httponly=True, secure=False, samesite='None')
    #         session['userName'] = userName
    #         print(f"Hello {userName}")
    #         # global currentUser
    #         currentUser = i
    #         return response
    # return jsonify({"message": "You need to signIn."})

    # !!! בדיקת פרטי כניסה !!!
    for user in users:
        if user.userName == data['userName'] and user.password == data['password']:
            currentUser = user
            response = make_response(jsonify({"message": "logged in successfully."}))
            response.set_cookie("userId", str(user.id), max_age=600, httponly=True, secure=False, samesite='None')
            session['userName'] = user.userName
            print(f"Hello {user.userName}")
            return response
    return jsonify({"message": "Invalid username or password."})


# דקורטור לוודא שהמשתמש מחובר
def login_required(f):
    def decorated_function(*args, **kwargs):
        userId = request.cookies.get('userId')
        if not userId or not session.get('userName'):  # בדיקה אם המשתמש מחובר
            return jsonify({"message": "You didn't logIn or your playing time is over.\n You need to log in first."})
            # register()
        return f(*args, **kwargs)

    decorated_function.__name__ = f.__name__  # תיקון שם הפונקציה
    return decorated_function


#  רשימת המילים עבור המשחק
def load_words():
    try:
        with open('allWords.txt', 'r') as file:
            print(file.read().strip().split(','))
            return file.read().strip().split(',')
    except FileNotFoundError:
        return []


#  מהלך המשחק
@app.route('/play/<int:num>', methods=['POST'])
@login_required
def play(num):
    try:
        words = load_words()
        if not words:
            return jsonify({"message": "No words available."})
        random.shuffle(words)  # ערבוב המילים
        word = words[num % len(words)]
        return jsonify({"word": word, "length": len(word)})
    except Exception as e:
        # !!! טיפול בשגיאות במשחק !!!
        print(f"Error during game: {e}")
        abort(500)


# הסטורית משחקים
@app.route('/history', methods=['GET'])
@login_required
def history():
    userId = request.cookies.get('userId')
    user = next((u for u in users if str(u.id) == userId), None)
    if user:
        return jsonify({"message": f"You have played: {user.countTimes} games with words: {user.words.__str__()}, and "
                                   f"you won: {user.countWin} times"})
    return jsonify({"message": "User not found."})


# יציאה מהמשחק
@app.route('/logOut', methods=['POST'])
@login_required
def logOut():
    # session.pop('userName', None)
    # !!! ניקוי session בעת התנתקות !!!
    session.clear()
    return jsonify({"message": "Logged out successfully."})


if __name__ == '__main__':
    app.run(debug=True)

import json

from requests import session
import time
import Server
import User

basic_url = "http://127.0.0.1:5000"

# יצירת אובייקט session
sess = session()

usersFile= 'Users.json'

#  תפריט למשתמש
def menu():
    print("1. sign_in")
    print("2. log_in")
    print("3. game")
    print("4. history")
    print("5. exit")


# הרשמה
def register():
    global currentUser
    userName = input("Enter your name: ")
    password = input("Enter a password: ")
    response = sess.post(f"{basic_url}/register", json={'userName': userName, 'password': password})
    if response.status_code == 200:
        print(Server.users.__str__())
        print(response.text)
    elif response.status_code == 400:
        print(response.json()["message"])
    else:
        print(response.status_code)


# כניסה
def logIn():
    global currentUser
    userName = input("Enter your name: ")
    password = input("Enter a password: ")
    response = sess.post(f"{basic_url}/logIn", json={'userName': userName, 'password': password})
    if response.status_code == 200:
        print(Server.users.__str__())
        print(response.text)
    elif response.status_code == 401:
        print(response.json()["message"])
    else:
        print(response.status_code)


# שלבי ה'המן תלוי'
def draw_hangman(stage):
    stages = [
        "x-------x",
        "x-------x\n|\n|\n|\n|\n|",
        "x-------x\n|       |\n|\n|\n|",
        "x-------x\n|       |\n|       0\n|\n|",
        "x-------x\n|       |\n|       0\n|       |\n|",
        "x-------x\n|       |\n|       0\n|      \\|/\n|",
        "x-------x\n|       |\n|       0\n|      \\|/\n|      \\",
        "x-------x\n|       |\n|       0\n|      \\|/\n|      \\ /\n|"
    ]
    return stages[stage]


#  עדכון המשתמש בקובץ ה-JSON
def update_user(user):
    with open(usersFile, 'r') as file:
        # while True:
        #     u = file.readline()
        #     if u.userName == user.userName and u.password == user.password:
        #         u.replace('')
        #     file.__next__()
        users = json.load(file)
        for u in users:
            if u['userName'] == user.userName and u['password'] == user.password:
                u.update(user.__dict__)
            with open(usersFile, 'w') as f:  # שמירת כל המשתמשים בקובץ
                json.dump(users, f, ensure_ascii=False, indent=4)


#  מהלך המשחק
def play():
    num = int(input("Enter a number to start the game: "))
    response = sess.post(f"{basic_url}/play/{num}")
    if response.status_code != 200:
        print(response.json()["message"])  # הודעת שגיאה
        return
    data = response.json()
    if 'word' not in data:   # בדיקה אם המפתח 'word' לא קיים
        print("Error: " + data["message"])
        return
    word = data['word']
    length = data['length']
    print(word, length)
    # w=''
    # for i in len(word):
    #     w+='_'
    w = ['_' for _ in range(length)]
    # # w = '_' * response.json()['length']  # יצירת רשימה של _ לפי אורך המילה
    print(f"You need to guess this word: {w}")
    # print(f"You need to guess this word: {''.join(w)}")
    wrongGuesses = 0
    guessedLetters = []
    while wrongGuesses < 6 and '_' in w:
        guess = input("Enter a letter: ")
        if guess in guessedLetters:
            print("You've already guessed that letter.")
            continue
        guessedLetters.append(guess)
        if guess in word:
            print("Good guess!")
            # for i in len(w):
            #     if word[i] == guess:
            #         w['guess'] = guess
            for i in range(len(word)):
                if word[i] == guess:
                    w[i] = guess  # עדכון ה-guess במיקום הנכון
            print(w)
            # print(''.join(w))
        else:
            wrongGuesses += 1
            print(draw_hangman(wrongGuesses))
            print(f"There are only {6 - wrongGuesses} wrong times left")
    # for user in Server.users:
    #     if user.userName == Server.currentUser.userName and user.password == Server.currentUser.password:
    #         user.countTimes += 1
    #         if wrongGuesses != 6:
    #             user.countWin += 1

    # update_user(Server.currentUser)
    # sess.post(f"{basic_url}/save_users")
    if wrongGuesses != 6:
        Server.currentUser.countTimes+=1
        Server.currentUser.countWin+=1
    #     return {f"message": f"You won!. The word is: {word}"}
    # return {f"message": f"You lost! The word was: {word}"}
        print(f"You won! The word is: {word}")
    else:
        Server.currentUser.countTimes+=1
        print(f"You lost! The word was: {word}")
    update_user(Server.currentUser)
    sess.post(f"{basic_url}/save_users")

# הסטורית משתמש
def history():
    response = sess.get(f"{basic_url}/history")
    if response.status_code == 200:
        #     return response.json()["message"]
        # return response.json()["message"]
        print(response.json()["message"])
    else:
        print(response.json()["message"])


# יציאה מהמשחק
def logOut():
    response = sess.post(f"{basic_url}/logOut")
    print(response.text)


def main():
    while True:
        menu()
        choice = input("Choose an option: ")

        if choice == '1':
            register()
        elif choice == '2':
            logIn()
        elif choice == '3':
            play()
        elif choice == '4':
            history()
        elif choice == '5':
            logOut()
            break
        else:
            print("wrong choice")
            return


if __name__ == '__main__':
    main()

קובץ allWords.txt:

apple, banana, tangerine, plum, orange,
cucumber, tomato, caret, date, grape,
melon, watermelon, squash, pepper,
eggplant, avocado, lemon, nectarine

נערך על-ידי פינגווין

הצטרפ/י לדיון

בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.

אורח
הוסף תגובה

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.