Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证键盘输入仅支持Python中的单词_Python_Python 3.x - Fatal编程技术网

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

验证键盘输入仅支持Python中的单词,python,python-3.x,Python,Python 3.x,首先,我是新来的,我一直在寻找是否还有更多像这样的问题,而我什么都没看到 我正在编写一个简单的库,您可以在其中写入有关您输入的书籍的数据。我将程序分为两个文件:一个用于类和方法,另一个用于这些类和方法的使用 我有一个计算书的页数的函数,如果你写信,它可以跳过一个错误。当我尝试这样做时,问题出现了,在其他功能(作者、编辑…)中,只允许字母 我的代码: 图书馆 class Libro(): def __init__(self): self.autor = ""

首先,我是新来的,我一直在寻找是否还有更多像这样的问题,而我什么都没看到

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

我有一个计算书的页数的函数,如果你写信,它可以跳过一个错误。当我尝试这样做时,问题出现了,在其他功能(作者、编辑…)中,只允许字母

我的代码:

图书馆

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()
 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()))
使用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()
 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()))
我希望,如果用户在author中写了一个数字,那么他打印了错误,并且在“DATOS DEL LIBRO”中它是空的,但我不明白。该函数给出了一个字符串,因此对其结果执行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 = ""

我给你的正则表达式是最简单的,你可以按照你的限制不做一个数字,但是你可以创建一个更复杂的带有空格和特殊字符限制的正则表达式。

你能发布整个文件吗?抱歉@Nsikan我不记得写代码了!我的代码如下。非常感谢你!我有一个关于正则表达式的问题。我想制定一条规则,当写名字和姓氏时,用空格隔开,这不允许数字。谢谢你的快速进入answering@AlanT[^\d\s]+([^\d\s]+)*这里是一个不接受数字的正则表达式。它接受多种名称,如“加布里埃尔·加西亚·马尔克斯”。你可以在这里测试你的正则表达式,我在控制台中运行我的程序,用这个正则表达式,它接受第二位的数字。例如:胡安23311。我的密码挂了。谢谢你的帮助me@AlanT哦,对不起,您应该使用函数re.fullmatch()而不是re.match()。编辑了回复。你知道一些解释如何使用正则表达式的网站吗?我想学它。我想提出一个条件,允许字母、空格和数字,但如果有人只写数字,就留下错误。我试着去做,但我不知道我在做什么。