首先,我是新手,我在寻找是否还有更多类似问题,而我什么也没看到。
我正在编程一个简单的库,您可以在其中编写有关所输入书籍的数据。我已将该程序分为两个文件:一个用于类和方法,另一个用于使用它们。
我有一个用于书页数的功能,如果您写信,可以跳过一个错误。问题出在我尝试在其他功能(作者,社论...)中仅允许使用字母时。
我的代码:
BIBLIOTECA.py
class Libro():
def __init__(self):
self.autor = ""
self.paginasTotales = 0
def setPaginasTotales(self, paginasTotales):
try:
self.paginasTotales = int(paginasTotales)
except ValueError:
print("\n\n ERROR")
self.paginasLeidas = 0
def getPaginasTotales(self):
return self.paginasTotales
def setAutor(self, autor):
try:
self.autor = str(autor)
except ValueError:
print("\n\n ERROR")
self.autor = ""
def getAutor(self):
return self.autor
libro = Libro()
USE_BIBLIOTECA.py
elif (opcion == 3):
while True:
print("""\n\n\n OPCIONES A MODIFICAR EN LIBRO \n
1 - Autor/es
2 - Editorial
3 - Idioma
4 - Nº de páginas leidas
5 - Nº de páginas
6 - Regresar al menu anterior
""")
opcion3 = int(input("Seleccione una opción: "))
print("Libro: " + str(tituloLibro))
if (opcion3 == 1):
autor = input("Autor/es: ")
libro.setAutor(autor)
*
*
*
elif (opcion == 5):
print(" \n\n DATOS DEL LIBRO \n ")
print("Autor/es: " + str(libro.getAutor()))
我想,如果用户在作者中写了一个数字,他打印了错误并且在“ DATOS DEL LIBRO”中为空,但我没有得到。
答案 0 :(得分:0)
input()函数提供一个字符串,因此对结果执行str()不会执行任何操作。
您可以对页数进行相反的处理。如果int()失败,那是正确的。如果成功,那就是错误:
def setAutor(self, autor):
try:
self.autor = int(autor)
print("\n\n ERROR")
self.autor = ""
except ValueError:
self.autor = autor
pass
如果要对输入施加更多限制,也可以使用正则表达式。
import re
AUTHOR_REGEX = "[^\d]+"
def setAutor(self, autor):
if re.fullmatch(AUTHOR_REGEX, autor):
self.autor = autor
else:
print("\n\n ERROR")
self.autor = ""
我给您的正则表达式是最简单的方法,它遵循限制不是数字的限制,但是您可以创建一个更复杂的,带有空格和特殊字符限制的正则表达式。