Si les modules en question sont chargés, si, ils peuvent s'ajouter tous seuls sans problème.
Mais si rien dans le reste du code ne les importe, comment on les charge?
Mais si rien dans le reste du code ne les importe, comment on les charge?
Y’a pas de magie : va falloir charger le code à un moment (même en C ou C++, quand tu fais des plugin à un moment tu les charges avec dlopen).Elzen a écritMais si rien dans le reste du code ne les importe, comment on les charge?
sys.modules["_base"]
plusieurs fois au lieu de faire un simple import _base.while parent.get_parent() is not None: parent = parent.get_parent()
Ça c’est moche sérieusement, le while sur une ligne (j’ai vu que tu le faisais pour les if/else et c’est déjà pas terrible, mais le while…)if value is not None and value != "":
Ça pourrait être if value tout simplement je pensefor i in range(len(combo.get_model())):
if combo.get_model()[i][0] == value:
combo.set_active(i)
Tu pourrais utiliser enumerate ici:
for idx, val in enumerate(combo.get_model()):
if val[0] == value:
combo.set_active(idx)
wv.load_uri(url); scroll.add(wv)
et
try: entry.set_text(sys.modules["_base"].savecoords(wv.get_uri()))
except Exception: pass
C‘est aussi très très moyen, surtout que tu le fait de manière aléatoire on dirait (du coup c'est moche ET pas cohérent…).Je vais creuser de ce côté, mercigrim7reaper a écritY’a pas de magie : va falloir charger le code à un moment (même en C ou C++, quand tu fais des plugin à un moment tu les charges avec dlopen).Elzen a écritMais si rien dans le reste du code ne les importe, comment on les charge?
importlib devrait te permettre de faire ça (via import_module peut-être).
Je n'avais encore jamais creusé la façon dont faire des classes abstraites/interfaces en Python. Ça me semble une bonne occasion de m'y mettregrim7reaper a écritTu pourrais avoir une classe abstraite à la base de tout ça (cf. abc).
Même si c’est pas obligatoire en Python ça rendrait le code plus sûr (y'aurait pas d’oubli d’implémenter une méthode requise) et ça permettrait de factoriser un peu le code (genre label pourrait être dans la classe de base).
Ça permettrait aussi de documenter ton interface (parce que là, le booléen renvoyé par la méthode prepare je n‘ai aucune idée de son rôle (ça viendra sûrement en lisant le reste du code, mais je devrais pas avoir à faire ça pour comprendre normalement)).
Je n'ai encore rien eu le temps de modifier depuis ton message précédent.grim7reaper a écritPourquoiplusieurs fois au lieu de faire un simple import _base.sys.modules["_base"]
Je suppose que c’est liée à une des remarques de mon message précédent (à propos du code qui traîne en dehors de toute fonctions).
Je n'ai pas assez l'habitude de tester autre chose que des booléensgrim7reaper a écritÇa pourrait être if value tout simplement je penseif value is not None and value != "":
Tiens, je n'avais jamais remarqué enumerate… C'est vrai que c'est largement mieux.grim7reaper a écritTu pourrais utiliser enumerate ici:for i in range(len(combo.get_model())): if combo.get_model()[i][0] == value: combo.set_active(i)
for idx, val in enumerate(combo.get_model()): if val[0] == value: combo.set_active(idx)
Hésite pas à poster ton code pour avoir des retours : ça évite de prendre de mauvaise habitudes quand on débutes et ça permets de découvrir certains trucs du langage plus rapidement (un exemple juste au dessus de ton message, avec enumerateSlystone a écritsi vous avez des conseils pour un programmeur en codeur en herbe, je suis preneur
Project Euler et Rosalind sont sympa je trouve.Slystone a écritlistes d'exercices (classés par difficulté croissante) pour se faire la main
chat : je ne sais pas.Slystone a écritforum/chat pour les noobs
number = 10001
c = 1
n = 2
prime = [2]
while c < number:
n += 1
for p in prime:
if n%p == 0:
break
elif p == prime[-1]:
prime.append(n)
c += 1
print(prime[-1])
(tout simple donc)#!/bin/python3
number1000digit = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
nb = str(number1000digit) # transformer numbre en tableau
digit = 13
somme = 0
sommeMax = 0
position = 0
zeros = []
# somme initiale
for i in range(digit):
somme += int(nb[i])
if int(nb[i]) == 0:
zeros.append(i)
sommeMax = somme
# avancer dans le tableau
for i in range(1, len(nb)-digit):
if int(nb[i + digit-1]) == 0:
zeros.append(i + digit-1)
if zeros and zeros[0] == i-1:
del zeros[0]
somme -= int(nb[i - 1])
somme += int(nb[i + digit])
if not zeros and somme > sommeMax: # if no zeros in sum
sommeMax = somme
position = i
# multiply numbers starting at position
multiply = 1
for i in range(digit):
multiply *= int(nb[i + position])
print(nb[i + position], position)
print(multiply)
Ça ressemble à la méthode des divisions successives, tu aurais aussi pu utiliser le crible d’Ératosthène.Oni_Shadow a écritméthode : commencer à 2, ajouter un nombre comme premier s'il n'est divisible par aucun nombre premier qui le précède.
Optimisation prématurée, et qui ne te donnera sûrement aucun gain en Python de toute façons. Ça va seulement rendre ton code moins lisible pour rien.Oni_Shadow a écritutiliser des addition plutôt que des multiplication pour trouver la plus grande somme (et en retenir la position) ; il me semble que les additions sont moins coûteuses.
Et avec GTK4+ qui cassera l'API+ABI tous les 6 mois, c'est pas gagnéElzen a écritGTK2 était une bonne bibliothèque. GTK3 en sera une quand ça arrêtera de casser les thèmes à chaque version
sourceMeanwhile, Gtk 4.0 will not be the final stable API of what we would call “Gtk 4”. Each 6 months, the new release (Gtk 4.2, Gtk 4.4, Gtk 4.6) will break API and ABI vs. the release that came before it. These incompatible minor versions will not be fully parallel installable; they will use the same pkg-config name and the same header file directory.
Bah j’ai cité pourquoi je considérait que c’était ignoble en C++ : moc.The Uploader a écritIl n'y a nul besoin de rejeter un opinion sans arguments (cf. "c'est ignoble")
On peut dire ça de [insérer ici un truc merdique utilisé par beaucoup de gens] aussi hein, et pourtant…The Uploader a écrit"Plein de gens l'utilisent depuis 15 ans et en sont très contents, […], ça doit pas être si mal que ça".
Pourquoi ?grim7reaper a écritBah j’ai cité pourquoi je considérait que c’était ignoble en C++ : moc.
C’est pas le summum de l’élégance…
Parce qu’une bibliothèque qui t’impose de passer un préprocesseur sur ton code c’est très moche.The Uploader a écritPourquoi ?grim7reaper a écritBah j’ai cité pourquoi je considérait que c’était ignoble en C++ : moc.
C’est pas le summum de l’élégance…
Encore une fois, le fait que ça marche bien ne change rien au fait que ça soit dégueulasse.The Uploader a écritEt si ça marche bien, c'est si ignoble que ça ?