为啥此代码不起作用以及如何修复它?

Posted

技术标签:

【中文标题】为啥此代码不起作用以及如何修复它?【英文标题】:Why this code doesn't work and how to repair it?为什么此代码不起作用以及如何修复它? 【发布时间】:2019-04-27 14:36:32 【问题描述】:

我写了一个代码,这是一个简单的程序,有 2 个输入和打印。我添加了一些代码以防止名称和年份正确。当来自输入的数据正确时,我的程序可以正常工作,但是当它不存在相同的消息并且输入可以再次输入时,但是在分配给变量新词之后,会打印旧词:/我使用 Python 3.7.3

import re
def name_check(x):
    pattern1=r'[A-Za-z]'
    if re.match(pattern1,x):
        pass
    else:
        print ('This is not your name.')
        give_name()
def year_check(y):
    pattern2=r'(\d)'
    if re.match(pattern2,y):
        pass
    else:
        print ('This is not your year of birth.')
        give_year()
def printing(x,y):
    try:
        print('Hey,',x,',in',int(y)+100,'year you will have 100 years.')
    except:
        print ('An error occured.')
def give_name():
    x=str(input('Enter your name: '))
    name_check(x)
    return x
def give_year():
    y=input('Enter your year of birth: ')
    year_check(y)
    return y
def program():
    x=give_name()
    y=give_year()
    printing(x,y)
program()

【问题讨论】:

请提供不适合您的输入! 尝试在def printing(x,y): 中将print (y,type(y)) 放在print ('An error occurred.') 之前。然后您将确定问题所在 【参考方案1】:

在您的程序中,xy 在链函数调用后不会改变。你应该在你的year_checkname_check这样的函数中使用return来对xy生效:

def name_check(x):
    pattern1=r'[A-Za-z]'
    if re.match(pattern1,x):
        return x
    else:
        print ('This is not your name.')
        return give_name()
def year_check(y):
    pattern2=r'(\d)'
    if re.match(pattern2,y):
        return y
    else:
        print ('This is not your year of birth.')
        return give_year()
def printing(x,y):
    try:
        print('Hey,',x,',in',int(y)+100,'year you will have 100 years.')
    except:
        print ('An error occured.')
def give_name():
    x=str(input('Enter your name: '))
    return name_check(x)
def give_year():
    y=input('Enter your year of birth: ')
    return year_check(y)
def program():
    x=give_name()
    y=give_year()
    printing(x,y)
program()

【讨论】:

【参考方案2】:

问题是您第一次只捕获变量(x 和 y)。 试试这个:

import re

def name_check(x):
    pattern1=r'[A-Za-z]'
    if re.match(pattern1,x):
        return True
    else:
        print ('This is not your name.')
        return False

def year_check(y):
    pattern2=r'(\d)'
    if re.match(pattern2,y):
        return True
    else:
        print ('This is not your year of birth.')
        return False

def printing(x,y):
    print(x,y)
    try:
        print('Hey,',x,',in',int(y)+100,'year you will have 100 years.')
    except:
        print ('An error occured.')

def give_name():
    x=str(input('Enter your name: '))
    while not name_check(x):
        x=str(input('Enter your name: '))
    return x

def give_year():
    y=input('Enter your year of birth: ')
    while not year_check(y):
        y=input('Enter your year of birth: ')
    return y

def program():
    x=give_name()
    y=give_year()
    printing(x,y)

program()

【讨论】:

以上是关于为啥此代码不起作用以及如何修复它?的主要内容,如果未能解决你的问题,请参考以下文章

为啥代码版本控制器在 erlang 中不起作用?

为啥在注释“cout”时此代码不起作用?

为啥 removeEventListener 不起作用

如何修复 Mpdf overWrite() 不起作用?

谁能帮我理解为啥在“后缀”起作用时“前缀”不起作用以及如何解决这个问题?

为啥 GlutPostRedisplay 和 sleep 功能在此代码中不起作用?