Missing 1 required positional argument: 'self'
Résolu
Bonjour,
J'essaye de crée un menu de jeu pour mon premier projet python. Je suis débutant et j'ai un problème en voulant importer mes jeux dans mon menu.
J'ai compris qu'il fallait utiliser
Je suis sous python 3.5 windows 10, et voila le message d'erreur:
Voila mon menu:
Et voila mon jeu qui pose problème:
Merci d'avance pour toute aide donner je suis vraiment coincer je ne trouve rien sur le net!
J'essaye de crée un menu de jeu pour mon premier projet python. Je suis débutant et j'ai un problème en voulant importer mes jeux dans mon menu.
J'ai compris qu'il fallait utiliser
selfmais je ne sais pas pourquoi ça ne marche pas !
Je suis sous python 3.5 windows 10, et voila le message d'erreur:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:/Users/manuel.gauthier/PycharmProjects/Apprentissage/Exercice.py", line 15, in <lambda>
c = Button(top, text="Just Price Game", command=lambda: just_price_game())
TypeError: just_price_game() missing 1 required positional argument: 'self'
Voila mon menu:
# !/usr/bin/python3
from tkinter import *
from dice import *
from justprice import *
top = Tk()
top.geometry("300x100")
def helloCallBack():
msg = messagebox.showinfo( "Hello Python", "Hello World")
B = Button(top, text="Dice Game", command=lambda: dice_game())
B.place(x=50, y=50)
c = Button(top, text="Just Price Game", command=lambda: just_price_game())
c.place(x=150, y=50)
top.mainloop()
Et voila mon jeu qui pose problème:
def just_price_game(self):
import datetime
import time
import webbrowser
import random
from colorama import Fore, Style
seconds = 0
# Données de temps
update_time = datetime.datetime.now()
time_given = update_time + datetime.timedelta(0, 60) # days, seconds, then other fields.
start_time = datetime.datetime.now()
# Choisis un site au hasard et utilise le prix comme juste prix
site_list = ["https://image.darty.com/gros_electromenager/refrigerateur-congelateur-refrigerateur-cong/refrigerateur-congelateur_haut/samsung_rt32k5000s9_t1603074206908A_163706861.jpg", "https://maxidiscount.ch/wp-content/uploads/2017/08/2017_0220_main1-1.jpg", "https://images.caradisiac.com/images/0/4/8/3/170483/S1-vente-aux-encheres-nouveau-record-pour-une-ferrari-250-gto-561193.jpg", "https://youtu.be/AFrppYjb-Hc", "https://www.achetermonchien.com/wp-content/uploads/sites/5/p1210939-810x550.jpg", "https://dyw7ncnq1en5l.cloudfront.net/optim/produits/363/42243/nvidia-titan-xp-collector-s-edition-star-wars_d647a13fe3d76576__450_400.jpg", "https://static.bhphoto.com/images/images500x500/apple_mqk62ll_a_watch_series_3_42mm_1505400411000_1362215.jpg", "http://www.investir-actif.com/wp-content/uploads/2014/04/lingot-or-1kg-gold-bar.jpg", "https://www.deltanautic.fr/8502/barque-armor-ria-430.jpg", "https://i2.cdscdn.com/pdt2/5/4/3/1/700x700/nes0000003111543/rw/nespresso-lot-de-cafe-fort-50-capsules.jpg", "https://picclick.com/Lollapalooza-2018-Wristband-Tickets-Chicago-SUNDAY-8-5-General-163176618876.html#&gid=1&pid=1"]
price_list = [629, 58, 44000000, 5700000, 1200, 1485, 399, 38000, 1750, 39, 335]
just_price_site = random.sample(site_list, 3)
index_site_list = site_list.index(just_price_site[0])
just_price = (price_list[index_site_list])
# The value that the player Bet
user_price = 0
# Set count and points
self.count = 0
# count + 1 point after achieving a level
self.point = 0
self.last_chance = 0
print("Le but du jeu est de trouvé le juste prix de trois objets qui te seront montrer si tu y arrive tu sera gratifier en ayant ton pseudo dans les logs du jeu!")
diff = input("Choisis la difficulté a laquel tu veux jouer!(F/M/D) pour facile/moyen/difficile(obvious)")
if diff == "F":
print("Tu as choisis le mode Facile tu as 3 niveaux a passer accroche toi! ")
seconds = 75
webbrowser.open(just_price_site[point])
if diff == "M":
print("Tu as choisis le mode Moyen tu as 3 niveaux a passer accroche toi! ")
seconds = 60
webbrowser.open(just_price_site[point])
if diff == "D":
print("Tu as choisis le mode difficile, tu as 3 niveaux a passer accroche toi! ")
seconds = 45
webbrowser.open(just_price_site[point])
def game(self):
global seconds, time_given, start_time, point, count, last_chance
while True:
print("Vous avez", seconds, "seconds pour trouver la valeur du biens (l'objet est toujours neuf!)")
ready = input("Vous êtes prêt ?(oui, non)")
if ready == "oui":
print("3")
time.sleep(1)
print("2")
time.sleep(1)
print("1")
time.sleep(1)
update_time = datetime.datetime.now()
time_given = update_time + datetime.timedelta(0, seconds)
start_time = datetime.datetime.now()
break
elif ready == "non":
print("Tant pis pour toi le jeu à déja commencé!")
break
else:
print("(L'indécision et l'inaction sont les parents de l'échec.) citation de Pierre Louis de Lacretelle :)")
running = True
while running:
try:
update_time = datetime.datetime.now()
countdown = time_given - update_time
time_taken = update_time - start_time
if update_time < time_given:
print("il reste", countdown, "secondes dépèche toi!")
# arrète le jeu après 60s il a le droit a une dernière chance
print(Style.RESET_ALL)
elif update_time > time_given:
print("Temps écoulé!")
last_chance = int(input("Je suis gentil je te laisse une dèrnière chance!"))
if last_chance == just_price:
print("Bravo c'était juste... mais vous avez trouvé le juste prix au dernière essaie !")
print("le juste prix était bien", just_price, "CHF.")
count += 1
print("Cela vous a demandé", count, "essaies.")
# fin du jeu
point += 1
break
elif last_chance != just_price_site:
print("Le juste prix était", just_price, ",dommage tu réussira la prochaine fois!")
quit()
# demander à l'utilisateur d'entrer un prix dans la console
user_price = int(input("Entrer un prix: "))
print("____________________________________________________________________")
# si le prix est le meme que le juste prix
if user_price == just_price:
print("Bravo vous avez trouvé en", time_taken, "secondes !")
print("le juste prix était bien", just_price, "CHF.")
count += 1
print("Cela vous a demandé", count, "essaies.")
point += 1
# fin du jeu
break
elif user_price > just_price:
print(Fore.BLUE + "C'est moins")
count += 1
# si le prix de l'utilisateur est inférieur au prix à trouver
elif user_price < just_price:
print(Fore.RED + "C'est plus")
count += 1
except ValueError:
print("Oops!")
game(self)
# level 1
if point == 1:
print(Fore.YELLOW + "-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-")
print("Tu es arrivé au niveau 2 ! es-tu prêt?")
webbrowser.open(just_price_site[1])
index_site_list = site_list.index(just_price_site[point])
just_price = (price_list[index_site_list])
count = 0
seconds -= 15
print(Style.RESET_ALL)
game(self)
# level 2
if point == 2:
print(Fore.YELLOW + "-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_")
print("Bien joué tu es arrivé jusqu'au dernier Niveau es-tu prêt?")
webbrowser.open(just_price_site[2])
index_site_list = site_list.index(just_price_site[point])
just_price = (price_list[index_site_list])
count = 0
seconds -= 15
print(Style.RESET_ALL)
game(self)
print(Fore.YELLOW + "VICTOIRE ! TU AS REUSSI TOUT LES NIVEAUX BRAVO!")
# Winner get to write his name in the winner.txt file
def winner(self): # Function name.
fwu = open('winner.txt', 'w') # create or open user.txt file.
while True:
self.winner = input("Username: ") # takes the user input.e.g what username to register
if len(winner) <= 12:
fwu.write(winner) # this command should write input into the file
fwu.close()
else:
print("The username length is too long (max 12")
winner()
Merci d'avance pour toute aide donner je suis vraiment coincer je ne trouve rien sur le net!
A voir également:
- Missing one positional argument python
- Typeerror: pack_configure() missing 1 required positional argument: 'self' - Meilleures réponses
- Start() missing 1 required positional argument: 'self' - Meilleures réponses
- Citizen code python avis - Accueil - Outils
- One ui - Guide
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Ubuntu
- One piece kai vf - Forum Cinéma / Télé
- One drive comment ça marche - Guide
1 réponse
Bonjour
Concernant ton problème :
Bonne chance
Concernant ton problème :
-
self
est un nom utilisé quand on fait de la programmation objet en python, voir le mot cléclass
. Ici tu n'as pas de classe, doncself
est vu comme un argument de la fonctionjust_price_game
. Cette fonction attend donc un paramètre. Or à l'appel, tu n'en passes aucun, d'où le message d'erreur. A priori il n'y aucune raison dans ton cas de passer un tel argument. - Évite de définir des fonctions dans des fonctions tant que tu débutes. Idem pour les
import
. Tant que tu débutes je te conseille d'écrire par exemple :
#!/usr/bin/env python3 import package1 import package2 from package3 import truc1, truc2 ... def fonction1( ... ): instruction11 instruction12 def fonction2( ... ): instruction21 instruction22 ... def main(): # programme principale instruction_main1 instruction_main2 main()
- Quand tu seras plus à l'aise, tu pourras commencer à faire des classes :
#!/usr/bin/env python3
import package1
import package2
from package3 import truc1, truc2
...
class Classe1:
def __init__(self, ...):
instruction1
instruction2
def methode1(self, ...):
instruction1
instruction2
...
...
def fonction1( ... ):
instruction11
instruction12
def fonction2( ... ):
instruction21
instruction22
...
def main(): # programme principale
instruction_main1
instruction_main2
main()
Bonne chance
D'ici là, bonne continuation