Python 添加输入验证后,循环无法工作 def Data(): 尽管如此: 尝试: PetTotal=int(输入(“请输入宠物数量:”) 除值错误外: 打印(“对不起,我不明白。”) 持续 其他: 宠物品种=[] 年龄=[] 尽管如此: 尝试: 性别=整数(输入(“输入性别选项:”) 除值错误外: 打印(“对不起,我不明白。”) 持续 如果性别>2或性别

Python 添加输入验证后,循环无法工作 def Data(): 尽管如此: 尝试: PetTotal=int(输入(“请输入宠物数量:”) 除值错误外: 打印(“对不起,我不明白。”) 持续 其他: 宠物品种=[] 年龄=[] 尽管如此: 尝试: 性别=整数(输入(“输入性别选项:”) 除值错误外: 打印(“对不起,我不明白。”) 持续 如果性别>2或性别,python,loops,validation,Python,Loops,Validation,当我试图理解我的代码时,我在代码中添加了一些输入验证。但是,我的代码不再正常工作。当PetTotal大于2时,它只循环一次,以便只能输入一种宠物类型(而不是两种)。我确信答案是显而易见的,但我想不出来…非常欢迎提供任何帮助!无论在try case中输入的值如何,else部分只执行一次,因此请尝试应用for循环,以便else部分执行n次 def Data(): while True: try: PetTotal = int(input("Please

当我试图理解我的代码时,我在代码中添加了一些输入验证。但是,我的代码不再正常工作。当
PetTotal
大于2时,它只循环一次,以便只能输入一种宠物类型(而不是两种)。我确信答案是显而易见的,但我想不出来…非常欢迎提供任何帮助!

无论在try case中输入的值如何,else部分只执行一次,因此请尝试应用for循环,以便else部分执行n次

def Data():
    while True:
        try:
            PetTotal = int(input("Please enter the number of pets: "))
        except ValueError:
            print("Sorry, I didn't understand that.")
            continue
        else:
            PetBreeds = []
            Ages = []
            while True:
                try:
                    Gender = int(input("Enter gender option: ")) 
                except ValueError:
                    print("Sorry, I didn't understand that.")
                    continue
                if Gender > 2 or Gender < 1:
                    print("Wrong!")
                    continue
                else:
                    Count = 0
                    while Count != PetTotal:
                        Breed = str(input("Breed: "))
                        Age = float(input("Age: ")) 
                        if Gender == 1:
                            PetBreeds.append(Breed)
                            Ages.append(Age)
                            Count = Count + 1
                        else:
                            PetBreeds.append(Breed)
                            Ages.append(Age)
                            Count = Count + 1
                        PetInfo = dict(zip({PetBreeds, Ages))
                        return PetBreeds, Gender;

不管在try case中输入的值如何,else部分只执行一次,因此请尝试应用for循环,以便else部分执行n次

def Data():
    while True:
        try:
            PetTotal = int(input("Please enter the number of pets: "))
        except ValueError:
            print("Sorry, I didn't understand that.")
            continue
        else:
            PetBreeds = []
            Ages = []
            while True:
                try:
                    Gender = int(input("Enter gender option: ")) 
                except ValueError:
                    print("Sorry, I didn't understand that.")
                    continue
                if Gender > 2 or Gender < 1:
                    print("Wrong!")
                    continue
                else:
                    Count = 0
                    while Count != PetTotal:
                        Breed = str(input("Breed: "))
                        Age = float(input("Age: ")) 
                        if Gender == 1:
                            PetBreeds.append(Breed)
                            Ages.append(Age)
                            Count = Count + 1
                        else:
                            PetBreeds.append(Breed)
                            Ages.append(Age)
                            Count = Count + 1
                        PetInfo = dict(zip({PetBreeds, Ages))
                        return PetBreeds, Gender;

方法中的最后一行
return
s-这将导致最外层的循环(控制要处理多少宠物的循环)退出

我认为您希望您的代码与

for i in range(0,PetTotal):
    #else part here
pets=[]
总计=输入(“…”)
而len(宠物)<总计:
#或者“对于范围内的i(0,总计):”如凯沙夫的回答
pet={}
处理性别、年龄等方面的输入
pets.append(宠物)

方法中的最后一行
return
s-这将导致最外层的循环(控制要处理多少宠物的循环)退出

我认为您希望您的代码与

for i in range(0,PetTotal):
    #else part here
pets=[]
总计=输入(“…”)
而len(宠物)<总计:
#或者“对于范围内的i(0,总计):”如凯沙夫的回答
pet={}
处理性别、年龄等方面的输入
pets.append(宠物)

您正在从函数“breaking”返回最外层的循环。相反,将其推入列表,并在列表长度等于
PetTotal
@tylersbastian后返回。谢谢您的回答。请您进一步澄清一下,如果您遵循python命名约定,您的代码将更易于其他人阅读。只有类名应以大写字母开头。函数名和其他变量使用
snake\u case
。尽量避免多层嵌套代码。一个函数应该只有一个作业。在这里,您可以做很多事情。您可以确保
Gender
是一个数字,但稍后您不会对
Age
执行相同的操作。如果用户输入的年龄不能解析为浮点数,则此操作将中断。您可以nstead将此任务提取到一个名为
input\u valid
的函数中,并像这样调用它
age=input\u valid(float,'your age?')
gender=input\u valid(int,'your integral gender?')
从函数返回最外层的循环。相反,将其推入列表,并在列表长度等于
PetTotal
@tylersbastian后返回。谢谢您的回答。请您进一步澄清一下,如果您遵循python命名约定,您的代码将更易于其他人阅读。只有类名应以大写字母开头。函数名和其他变量使用
snake\u case
。尽量避免多层嵌套代码。一个函数应该只有一个作业。在这里,您可以做很多事情。您可以确保
Gender
是一个数字,但稍后您不会对
Age
执行相同的操作。如果用户输入的年龄不能解析为浮点数,则此操作将中断。您可以nstead将此任务提取到一个名为
input\u valid
的函数中,并像这样调用它
age=input\u valid(float,'your age?')
gender=input\u valid(int,'your integral gender?')
谢谢您的回答。您会在第8行之后插入哪个行号(其他:)感谢您的回复。您会将其插入哪一行号?准确地说,在第8行(其他:)之后-这是一个dict列表,其中每个dict包含关于宠物的信息-这是一个dict列表,其中每个dict包含关于宠物的信息