Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Error Checking_Attribution - Fatal编程技术网

Python 为什么此代码没有';坏了,怎么修理?

Python 为什么此代码没有';坏了,怎么修理?,python,variables,error-checking,attribution,Python,Variables,Error Checking,Attribution,我写了一个代码,这是一个简单的程序,有2个输入和打印。我添加了一些代码以防止名称和年份是正确的。当输入的数据正确时,我的程序工作正常,但当它没有相等的消息范围时,可以再次输入,但在指定变量新词后,会打印旧词:/I使用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

我写了一个代码,这是一个简单的程序,有2个输入和打印。我添加了一些代码以防止名称和年份是正确的。当输入的数据正确时,我的程序工作正常,但当它没有相等的消息范围时,可以再次输入,但在指定变量新词后,会打印旧词:/I使用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()

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

重新导入
def名称检查(x):
模式1=r'[A-Za-z]'
如果重新匹配(模式1,x):
返回真值
其他:
打印('这不是你的名字')
返回错误
def年度检查(y):
模式2=r'(\d)'
如果重新匹配(模式2,y):
返回真值
其他:
打印('这不是您的出生年份')
返回错误
def打印(x,y):
打印(x,y)
尝试:
打印('Hey',x',in',int(y)+100,'year you will have 100 year')
除:
打印('发生错误')
def give_name():
x=str(输入('输入您的姓名:'))
而不是名称检查(x):
x=str(输入('输入您的姓名:'))
返回x
def give_year():
y=输入('输入您的出生年份:')
虽然不是年检(y):
y=输入('输入您的出生年份:')
返回y
def程序():
x=给出_名称()
y=给出年份()
印刷(x,y)
程序()

在程序中,链式函数调用后,
x
y
不会改变。您应该在
年度检查
姓名检查
中使用
返回
,这样才能对
x
y
生效:

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()

请提供不适合您的输入!尝试将
print(y,键入(y))
放在
print(出现错误)之前。
def printing(x,y)中:
。然后你会发现问题所在