验证键盘输入仅支持Python中的单词

时间:2019-05-11 12:57:45

标签: python python-3.x

首先,我是新手,我在寻找是否还有更多类似问题,而我什么也没看到。

我正在编程一个简单的库,您可以在其中编写有关所输入书籍的数据。我已将该程序分为两个文件:一个用于类和方法,另一个用于使用它们。

我有一个用于书页数的功能,如果您写信,可以跳过一个错误。问题出在我尝试在其他功能(作者,社论...)中仅允许使用字母时。

我的代码:

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”中为空,但我没有得到。

1 个答案:

答案 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 = ""

我给您的正则表达式是最简单的方法,它遵循限制不是数字的限制,但是您可以创建一个更复杂的,带有空格和特殊字符限制的正则表达式。