You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python用户名生成器末尾IF语句异常问题求助

解决Python用户名生成器的条件判断异常问题

你遇到的问题很典型——最后那个合法性检查的条件写错啦!咱们来拆解下:

原代码里最后一行判断用了 if category != ("1","2","3","4"),这里的问题在于:你把一个字符串category是用户输入的"1"/"2"这类字符串)和一个元组("1","2","3","4"))做不等于比较,这俩类型不同,Python会直接判定它们不相等,所以不管你输入合法的"1"-"4"中的哪一个,这个条件都会触发,导致那段重新输入的代码跑出来。

两种修复方案:

方案1:修正合法性判断的条件

把最后那个if的条件改成检查字符串是否不在合法选项的集合里:

if category not in ("1","2","3","4"):
    print("\nPlease enter a valid option:")
    category = str(input("What category do you want?\n1 for general\n2 for animals\n3 for food\n4 for human names\n\n"))

方案2:优化整个条件分支结构(更推荐)

把前面的多个独立if改成elif,最后用else处理非法输入,这样代码逻辑更连贯,也避免重复判断:

import random

# variables that make up the name. the "1" symbolises the first part and the "2" symbolises the last part of the username
general1 = ["noob","baby","dude","soldier","discount"]
general2 = ["kid","plant","painter","officer","conscience"]
animal1 = ["frantic","fiesty","quick","quiet","loud"]
animal2 = ["ferret","dog","hampster","cat","rabbit"]
food1 = ["delicious","disgusting","stinky","fried","bitter"]
food2 = ["pickle","chocolate","rice","water","lemonade"]
name1 = ["dylan","eve","chris","simon","adele"]
name2 = ["christopher","sharp","smith","james","baker"]

# the main part
category = str(input("**USERNAME GENERATOR**\n\nWhat category do you want?\n1 for general\n2 for animals\n3 for food\n4 for human names\n\n"))
if category == "1":
    output1 = random.choice(general1)
    output2 = random.choice(general2)
    endNumber = random.randint(0, 100)
    print("\nYour random username is: ",output1,output2,endNumber)
elif category == "2":
    output1 = random.choice(animal1)
    output2 = random.choice(animal2)
    endNumber = random.randint(0, 100)
    print("\nYour random username is: ",output1,output2,endNumber)
elif category == "3":
    output1 = random.choice(food1)
    output2 = random.choice(food2)
    endNumber = random.randint(0, 100)
    print("\nYour random username is: ",output1,output2,endNumber)
elif category == "4":
    output1 = random.choice(name1)
    output2 = random.choice(name2)
    endNumber = random.randint(0, 100)
    print("\nYour random username is: ",output1,output2,endNumber)
else:
    print("\nPlease enter a valid option:")
    category = str(input("What category do you want?\n1 for general\n2 for animals\n3 for food\n4 for human names\n\n"))

另外提个小细节:原代码里random.choice((general1))的括号可以去掉,直接写random.choice(general1)就行,因为(general1)不是元组,只是给列表加了个括号,没实际意义~

内容的提问来源于stack exchange,提问作者Pythonista

火山引擎 最新活动