如何使用此功能更改“项目”的值?这将是使用递归验证的示例

问题描述

如果存储在items中的输入正确,则items将保留原始值。但是,如果输入不正确,则会提示用户输入新的items并将该值存储在原始items变量中。我的问题是我的代码未将新输入存储在全局items变量中。我尝试使用global关键字无济于事。我不能使用for/while循环,而只能使用标准库。 这是我的代码

items = input("Please enter integers").split()
items = list(map(int,items))
    
def checksYn(p):

    if max(p) > 100 or min(p) < -100:
        new_items = input("Please enter integers between -100 and 100").split()
        new_items = list(map(int,new_items))
        checksYn(new_items)

    global items
    items = p     

print(items)

解决方法

以下代码将解决您的问题:

items = input("Please enter integers").split()
items = list(map(int,items))
    
def checksYn(p):
    if max(p) > 100 or min(p) < -100:
        new_items = input("Please enter integers between -100 and 100").split()
        new_items = list(map(int,new_items))
        
        return checksYn(new_items)
    else:
        return p
     
x=checksYn(items)
print(x)
,

让我们设计一个像这样的程序-

Please enter integers:
1 2 300

Please enter integers between -100 and 100:
1 two 3

Please enter integers between -100 and 100:
-5 1 2 three

Please enter integers between -100 and 100:
-99 1 2 3

done: [-99,1,2,3]

我们开始对递归程序main-

进行粗略的介绍
def main(nums):
  try:
    return validate(nums)
  except:
    return main(retry())

nums = main(init())
print(f"done: {nums}")

现在我们只实现initretry-

def init():
  return get_user_input("Please enter integers")

def retry():
  return get_user_input("Please enter integers between -100 and 100")

def get_user_input(prompt):
  return input(f"{prompt}:\n").split()

最后写出validate-

def validate(nums):
  r = []
  for x in map(int,nums):
    if x < -100 or x > 100:
      raise ValueError
    else:
      r.append(x)
  return r

大功告成!