Aller au contenu

Initiation au Lua avec Scribunto/Exercices/Recherche d'erreurs

Leçons de niveau 10
Une page de Wikiversité, la communauté pédagogique libre.
Recherche d'erreurs
Image logo représentative de la faculté
Exercices no2
Leçon : Initiation au Lua avec Scribunto
Chapitre du cours : Mise au point d'un module

Exercices de niveau 10.

Exo préc. :Premiers pas
Exo suiv. :Sur les tables et les fonctions
En raison de limitations techniques, la typographie souhaitable du titre, « Exercice : Recherche d'erreurs
Initiation au Lua avec Scribunto/Exercices/Recherche d'erreurs
 », n'a pu être restituée correctement ci-dessus.



On souhaite écrire un module qui traduit en mot un paramètre entré sous forme de chiffre. Par exemple si l’on rentre 8, on souhaite obtenir huit. Dans le Module:Chiffre, on écrit le programme suivant :

local p = {}

function p.traduit(frame)	--Fonction traduisant un chiffre en toutes lettres
	local reponse = "Chiffre non reconnu"
	local chiffre = frame.args[1]	--La variable chiffre recueille le premier argument entré sous forme de nombre
	if chiffre == 0 then reponse = "zéro" end
	if chiffre == 1 then reponse = "un" end
	if chiffre == 2 then reponse = "deux" end
	if chiffre == 3 then reponse = "trois" end
	if chiffre == 4 then reponse = "quatre" end
	if chiffre == 5 then reponse = "cinq" end
	if chiffre == 6 then reponse = "six" end
	if chiffre == 7 then reponse = "sept" end
	if chiffre == 8 then reponse = "huit" end
	if chiffre == 9 then reponse = "neuf" end
	return reponse
end

return p

En testant le programme, nous voyons que : {{#invoke:Chiffre|traduit|7}} donne : Chiffre non reconnu

Expliquer pourquoi le module ne fonctionne pas



On souhaite écrire un programme qui nous confirme le paramètre entré. Après avoir écrit le programme suivant :

local p = {}

local param = frame.args[1]

function p.confirme(frame)
	local reponse
	reponse = "Le paramètre, que vous avez rentré, est "..param
	return reponse
end

return p

on obtient, à l'exécution du programme, le message : Erreur de script.

Expliquez où se trouve l'erreur !


Dans un Module:Calculs, nous écrivons une fonction somme ayant pour but de faire la somme de ses deux arguments.

Nous écrivons :

local p = {}

function p.somme(frame)
	local a = frame.arg[1]
	local b = frame.arg[2]
	c = a + b
	return c
end

return p

Nous essayons ensuite de calculer la somme des deux nombres 7 et 4 en écrivant : {{#invoke:Calculs|somme|7|4}} et nous obtenons : Erreur Lua dans Module:Calculs à la ligne 4 : attempt to index field 'arg' (a nil value).

Expliquer pourquoi cela ne fonctionne pas.


On souhaite écrire une fonction p.sature qui admet comme paramètre un nombre entier. Cette fonction retourne ce nombre si celui-ci est inférieur à 10 et retourne 10 si le nombre est supérieur à 10.

Le programme est ainsi écrit :

local p = {}

function p.sature(frame)
	local a = frame.args[1]
	if a < 10 then
		local b = a
	end
	if a > 9 then
		local b = 10
	end
	return b
end

return p


Expliquer pourquoi ce programme ne fonctionne pas.