am_dot_com

FP 2022-10-31

Oct 31st, 2022 (edited)
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.87 KB | None | 0 0
  1. # am_util.py
  2. # uma coleção de ferramentas com potencial
  3. # de utilidade entre projetos
  4. # objetivo é ilustrar: reutilização de código a partir de import
  5.  
  6. def tabelaDeSimbolos(
  7. pCodigoInicial:int=0,
  8. pCodigoDeParagem:int=128, # representa o código de paragem
  9. pOrdemAscendente:bool=True,
  10. pbVerbose:bool=False # faz print se True
  11. ):
  12. strTabelaDeSimbolos:str=""
  13. codigo:int = None
  14.  
  15. if(pOrdemAscendente):
  16. codigo = pCodigoInicial
  17. else:
  18. codigo = pCodigoDeParagem-1
  19. # if-else
  20.  
  21. bDevoContinuar: bool = True
  22. while (bDevoContinuar):
  23. simbolo = chr(codigo)
  24. linha: str = f"{codigo} : {simbolo}"
  25. strTabelaDeSimbolos+=linha+"\n" # concatenação cumulativa
  26. #print(linha) # print incondicional
  27. #if (pbVerbose==True):
  28. if(pbVerbose):
  29. print(linha, sep="")
  30. #else
  31.  
  32. if(pOrdemAscendente):
  33. codigo += 1 # codigo = codigo + 1
  34. bDevoContinuar = codigo < pCodigoDeParagem
  35. else:
  36. codigo -= 1 # codigo = codigo - 1
  37. bDevoContinuar = codigo >= 0 # condição de continuidade
  38. # if-else
  39. # while
  40.  
  41. return strTabelaDeSimbolos
  42. # def tabelaDeSimbolos
  43.  
  44. """
  45. TODO: o que é acontece quando o utilizador responder
  46. inputs que não são transformáveis em inteiros?
  47. """
  48. def pedeInteiro(
  49. pStrPergunta:str,
  50. pbVerbose:bool=False
  51. ):
  52. resposta:str = input(pStrPergunta) # "0"
  53. iResposta = int(resposta) # 0
  54.  
  55. strFeedback:str = f"Recebi o inteiro {iResposta}\n"
  56. if(pbVerbose):
  57. print(strFeedback)
  58. # if
  59.  
  60. return iResposta
  61. # def pedeInteiro
  62.  
  63. def pedeFrase(
  64. pStrPergunta:str,
  65. pbVerbose:bool=False
  66. ):
  67. resposta = input(pStrPergunta)
  68. if(pbVerbose):
  69. strFeedback:str=f"Recebi a resposta \"{resposta}\"\n"
  70. print(strFeedback)
  71. # if
  72. return resposta
  73. # def pedeFrase
  74.  
  75. """
  76. Esta função serve para escrever conteúdo para um ficheiro de texto
  77. Recebe o nome do ficheiro de texto pelo param pStrNomeDoFicheiro
  78. Recebe uma frase que é o conteúdo do ficheiro
  79. A escrita é feita em modo NÃO DESTRUTIVO (append)
  80. retorna True em caso de sucesso; c.c. retorna False
  81. """
  82. def escreverFicheiroDeTexto(
  83. pStrNomeDoFicheiro:str,
  84. pStrConteudo:str=""
  85. )->bool:
  86. fa =\
  87. open(
  88. file=pStrNomeDoFicheiro,
  89. mode="a" #w wt wb #a at
  90. )
  91.  
  92. if(fa):
  93. fa.write(pStrConteudo)
  94. fa.close()
  95. return True
  96. # if
  97.  
  98. return False
  99. # def escreverFicheiroDeTexto
  100.  
  101. ***********************************
  102.  
  103. # 4.py
  104. #from am_util import *
  105. from am_util import \
  106. tabelaDeSimbolos, pedeFrase, \
  107. pedeInteiro, escreverFicheiroDeTexto
  108.  
  109. """
  110. Escrever um programa para escrita de tabelas de símbolos em ficheiro.
  111. Ao utilizador deverá perguntar-se:
  112. - o código inicial da tabela;
  113. - o código final da tabela;
  114. - um nome para a tabela;
  115. - um nome para o ficheiro.
  116. """
  117.  
  118. codigoInicial = pedeInteiro("Código inicial da tabela?", pbVerbose=True)
  119. codigoFinal = pedeInteiro("Código final da tabela?", pbVerbose=True)
  120.  
  121. nomeParaTabela = pedeFrase("Nome a sua tabela personalizada?", pbVerbose=True)
  122. nomeParaFicheiro = pedeFrase("Nome o ficheiro onde gravar a tabela?", pbVerbose=True)
  123.  
  124. """
  125. strFeedback =\
  126. f"Valores recebidos: ci={codigoInicial} cf={codigoFinal}"+\
  127. f"nome para tabela={nomeParaTabela} fich={nomeParaFicheiro}\n"
  128. print(strFeedback)
  129. """
  130.  
  131. strTabelaDeSimbolos:str =\
  132. tabelaDeSimbolos(
  133. codigoInicial,
  134. codigoFinal
  135. )
  136.  
  137.  
  138. strTodoConteudoQueVaiSerEscrito =\
  139. nomeParaTabela+"\n"+strTabelaDeSimbolos
  140.  
  141. bFoiPossivelEscrever:bool =\
  142. escreverFicheiroDeTexto(
  143. nomeParaFicheiro,
  144. strTodoConteudoQueVaiSerEscrito
  145. )
  146.  
  147. if (bFoiPossivelEscrever):
  148. print("Sucesso, ficheiro escrito.")
  149. else:
  150. print("Falhou a escrita do ficheiro.")
Advertisement
Add Comment
Please, Sign In to add comment