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

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.



Exercice 2-1

modifier

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



Exercice 2-2

modifier

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 !


Exercice 2-3

modifier

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.


Exercice 2-4

modifier

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.