最后一段代码在不需要运行时正在运行



我正在用Python做一个用户名生成器,一切都很顺利,除了一件事:"IF"语句的最后部分出现了故障。代码的第一部分可以正常工作,但最后一段会出现问题,即使我输入了一个被认为是有效的选择。

代码:

[import random, tkinter
#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**nnWhat category do you want?n1 for generaln2 for animalsn3 for foodn4 for human namesnn"))
if category == "1":
output1 = random.choice((general1))
output2 = random.choice((general2))
endNumber = random.randint(0, 100)
print("nYour random username is: ",output1,output2,endNumber)
if category == "2":
output1 = random.choice((animal1))
output2 = random.choice((animal2))
endNumber = random.randint(0, 100)
print("nYour random username is: ",output1,output2,endNumber)
if category == "3":
output1 = random.choice((food1))
output2 = random.choice((food2))
endNumber = random.randint(0, 100)
print("nYour random username is: ",output1,output2,endNumber)
if category == "4":
output1 = random.choice((name1))
output2 = random.choice((name2))
endNumber = random.randint(0, 100)
print("nYour random username is: ",output1,output2,endNumber)
if category != ("1","2","3","4"):
print("nPlease enter a valid option:")
category = str(input("What category do you want?n1 for generaln2 for animalsn3 for foodn4 for human namesnn"))][1]
if category != ("1","2","3","4"):

这只检查category是否等于元组("1","2","3","4")。你想检查category是否等于元组的任意值。将这一行修改为:

if category not in ("1","2","3","4"):

if语句结束后,执行下一行。在你的例子中,下一行是下一个if段落。然后是下一个,以此类推。例如:

if a:
do_action_a()
if b:
do_action_b()
if c:
do_action_c()
if not(a or b or c):
do_action_all_others()

在这里,您将始终独立于前一段执行每一段。

要避免这种情况,可以将下列语句放在前一个if语句的Else:

if a:
do_action_a()
else:
if b:
do_action_b()
else:
if c:
do_action_c()
else:
do_action_all_others()

但是,对此有一个习语:elif

所以python是使用:

if a:
do_action_a()
elif b:
do_action_b()
elif c:
do_action_c()
else:
do_action_all_others()

将最后一个条件语句改为

if category not in ('1', '2', '3', '4'):
print('nPlease enter a valid option:')
category = str(input('. . .'))

我对你的代码的改进实现

import random
general_first = ['noob', 'baby', 'dude', 'soldier', 'discount']
general_last = ['kid', 'plant', 'painter', 'officer', 'conscience']
animal_first = ['frantic', 'fiesta', 'quick', 'quiet', 'loud']
animal_last = ['ferret', 'dog', 'hamster', 'cat', 'rabbit']
food_first = ['delicious', 'disgusting', 'stinky', 'fried', 'bitter']
food_last = ['pickle', 'chocolate', 'rice', 'water', 'lemonade']
name_first = ['dylan', 'eve', 'chris', 'simon', 'adele']
name_last = ['christopher', 'sharp', 'smith', 'james', 'baker']

def endNumber(): return str(random.randint(0, 100))

def firstName(values): return random.choice(values)

def lastName(values): return random.choice(values)

def generate_usernames(category):
if category == 1:
return firstName(general_first) + lastName(general_last) + endNumber()
elif category == 2:
return firstName(animal_first) + lastName(animal_last) + endNumber()
elif category == 3:
return firstName(food_first) + lastName(food_last) + endNumber()
elif category == 4:
return firstName(name_first) + lastName(name_last) + endNumber()
else:
return None

input_prompt = "What category do you want?" 
"n'1' for general" 
"n'2' for animals" 
"n'3' for food" 
"n'4' for human names" 
"nnCHOICE : "
invalid_prompt = "nPlease enter a valid option"
print('tUSERNAME GENERATOR')
while True:
input_category = int(input(input_prompt))
username = generate_usernames(input_category)
if username is not None:
print(f'Your Random Username is : {username}')
break
else:
print(invalid_prompt)

最新更新