查看新数据是否等于旧数据,如果旧数据等于新数据,则什么都不做。否则将旧数据重命名为新数据

2024-04-26 00:54:19 发布

您现在位置:Python中文网/ 问答频道 /正文

正如我的坏标题所描述的,我想检查我的新数据是否等于我的旧数据。 如果新数据等于旧数据:什么也不做。 如果新数据不等于旧数据:将旧数据更改为新数据。 然后用旧数据的新定义重复整个过程。你知道吗

制作了这段代码,但正如您所见,每次旧数据都会在末尾重新定义 当再次运行代码时,它被重新定义。你知道吗

def ask_data_change():
    data_inn = 'old data'    
    my_data_input = input('What is your input?: ')


    if data_inn == my_data_input:
        #does nothing
        print('Data input is equal to existing data')
        print('data unchanged: ' + data_inn)
    else:
        #Changes data_inn to new data input
        data_inn = my_data_input
        print('Data is not equal to existing, changing data_inn to my_data_input')
        print('New data is now: ' + data_inn)


while True:
    ask_data_change()

Tags: to数据代码inputdata定义ismy
3条回答

这是因为在每次调用时都要重新定义data_inn,将while循环移到函数本身,并在函数外部重新定义旧数据:

def ask_data_change():
    data_inn = 'old data'
    while True:    
        my_data_input = input('What is your input?: ')

        if data_inn == my_data_input:
            #does nothing
            print('Data input is equal to existing data')
            print('data unchanged: ' + data_inn)
        else:
            #Changes data_inn to new data input
            data_inn = my_data_input
            print('Data is not equal to existing, changing data_inn to my_data_input')
            print('New data is now: ' + data_inn)

ask_data_change()

另一个选项是将data_inn作为全局变量,这样,它也不会在函数中重新定义:

data_inn = 'old data'

def ask_data_change():
    global data_inn   
    my_data_input = input('What is your input?: ')
    if data_inn == my_data_input:
        #does nothing
        print('Data input is equal to existing data')
        print('data unchanged: ' + data_inn)
    else:
        #Changes data_inn to new data input
        data_inn = my_data_input
        print('Data is not equal to existing, changing data_inn to my_data_input')
        print('New data is now: ' + data_inn)

while True:
    ask_data_change()

每次在outer函数中调用ask_data_change()时,都会重置两个值

假设您想在键入不同的输入时停止循环,请尝试以下操作

def ask_data_change():
    data_inn = 'old data' 
    my_data_input = input('What is your input?: ')

    while data_inn == my_data_input:
        #does nothing
        print('Data input is equal to existing data')
        print('data unchanged: ' + data_inn)
        my_data_input = input('What is your input?: ')

    #Changes data_inn to new data input
    data_inn = my_data_input
    print('Data is not equal to existing, changing data_inn to my_data_input')
    print('New data is now: ' + data_inn)
    return data_inn # Assuming you want this value 

data_inn = ask_data_change()

因为每次运行函数时,所有值都会重置。这称为作用域(函数调用中定义的值保留在该函数调用中,除非返回)。你知道吗

请看这里:

def f():
    i = 0
    i += 1
    print(i)

for _ in range(3):
    f()

输出:

1
1
1

如您所见,i每次都在函数中被重新定义,它不保存以前的值。您需要返回新值,然后在每次迭代时将其传递给函数,如下所示:

def ask_data_change(data_inn):
    my_data_input = input('What is your input?: ')  

    if data_inn == my_data_input:
        #does nothing
        print('Data input is equal to existing data')
        print('data unchanged: ' + data_inn)
    else:
        #Changes data_inn to new data input
        data_inn = my_data_input
        print('Data is not equal to existing, changing data_inn to my_data_input')
        print('New data is now: ' + data_inn)

    return data_inn


data_inn = 'old data'
while True:
     data_inn = ask_data_change(data_inn)

相关问题 更多 >