多个问题的用户输入不正确或没有

2024-10-03 21:34:18 发布

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

下面是一个程序,它要求用户输入字符串和int。如果有人输入错误的类型或根本没有输入,程序将以错误结束。我需要处理每个问题的例外情况。我该怎么做?我只需要一行“while true”吗?它能在一个街区内吗

谢谢,

马特

customerName = input("Customer Name:\n")
mixName = input("Mix Name:\n") 
L_Citrulline_Mallate = int(input("Amount of L-Citrulline Malate (2:1) per serving(grams):\n"))
Beta_Alanine = int(input("Amount of Beta Alanine per serving(grams):\n"))
Caffeine_Anhydrous = float(input("Amount of Caffeine Anhydrous per serving(milligrams):\n"))/1000
Betaine_Anhydrous = int(input("Amount of Betaine Anhydrous per serving(grams):\n"))
Taurine = int(input("Amount of Taurine per serving(grams):\n"))
Creatine_HCL = int(input("Amount of Creatine_HCL per serving(grams):\n"))
L_Theanine = float(input("Amount of L-Theanine per serving(milligrams):\n"))/1000
L_Tyrosine = int(input("Amount of L-Tyrosine per serving(grams):\n"))
Sodium_Bicarbonate = float(input("Amount of Sodium_Bicarbonate per serving(milligrams):\n"))/1000

servings = 35
#Mix Total
Mix_Total = float(L_Citrulline_Mallate + Beta_Alanine + Caffeine_Anhydrous + Betaine_Anhydrous + Taurine + Creatine_HCL + L_Theanine + L_Tyrosine + Sodium_Bicarbonate)* servings
#Servings Total
Serving_Total = float(L_Citrulline_Mallate + Beta_Alanine + Caffeine_Anhydrous + Betaine_Anhydrous + Taurine + Creatine_HCL + L_Theanine + L_Tyrosine + Sodium_Bicarbonate)
Flavor_Weight = float(Serving_Total*.25)
Flavor_Weight_Total = float(Flavor_Weight * servings)
Grand_Serving_Total_Weight = float(Flavor_Weight + Serving_Total)
Grand_Weight_Mix_Total = float(Grand_Serving_Total_Weight * servings)

#while
while (Grand_Weight_Mix_Total > 450):
        servings = servings - 1
        Grand_Weight_Mix_Total = float(Grand_Serving_Total_Weight * servings)
        print('Servings loop value', servings)

#Flavor weight total calc
Flavor_Weight_Total = float(Flavor_Weight * servings)

#Print 
print (f'Customer: {customerName}')
print (f'Mix Name: {mixName}')
print (f'Servings: {servings}')
print (f'L-Citrulline Malate: {L_Citrulline_Mallate}')
print (f'Beta Alanine: {Beta_Alanine}')
print (f'Caffeine Anhydrous: {Caffeine_Anhydrous}')
print (f'Betaine Anhydrous: {Betaine_Anhydrous}')
print (f'Taurine: {Taurine}')
print (f'Creatine HCL: {Creatine_HCL}')
print (f'L-Theanine: {L_Theanine}')
print (f'L-Tryosine: {L_Tyrosine}')
print (f'Sodium Bicarbonate: {Sodium_Bicarbonate}')
#Calculate total grams needed for each ingredent
Total_L_Citrulline_Mallate = int(L_Citrulline_Mallate * servings)
Total_Beta_Alanine = int(Beta_Alanine * servings)
Total_Caffeine_Anhydrous = float(Caffeine_Anhydrous * servings)
Total_Betaine_Anhydrous = int(Betaine_Anhydrous * servings)
Total_Taurine = int(Taurine * servings)
Total_Creatine_HCL = int(Creatine_HCL * servings)
Total_L_Theanine = float(L_Theanine * servings)
Total_L_Tyrosine = int(L_Tyrosine * servings)
Total_Sodium_Bicarbonate = float(Sodium_Bicarbonate * servings)
#Recalculation Grand_Weight_Total_Mix
Grand_Weight_Mix_Total = float(Grand_Serving_Total_Weight * servings)
Mix_Total = float(L_Citrulline_Mallate + Beta_Alanine + Caffeine_Anhydrous + Betaine_Anhydrous + Taurine + Creatine_HCL + L_Theanine + L_Tyrosine + Sodium_Bicarbonate)* servings
#Print total grams of each ingredient
print("L-Citrulline Mallate Total Grams:", Total_L_Citrulline_Mallate)
print("Beta Alanine Total Grams:", Total_Beta_Alanine)
print("Caffeine Anhydrous Total Grams:", Total_Caffeine_Anhydrous)
print("Betaine Anhydrous Total Grams:", Total_Betaine_Anhydrous)
print("Taurine Total Grams:", Total_Taurine)
print("Creatine HCL Total Grams:", Total_Creatine_HCL)
print("L-Theanine Total Grams:", Total_L_Theanine)
print("L-Tyrosine Total Grams:", Total_L_Tyrosine)
print("Sodium Bicarbonate Total Grams:", Total_Sodium_Bicarbonate)
print("Mix serving weight (flavor not included): ", Serving_Total)
print("Mix total weight: ", Mix_Total)
print("Flavor Serving Weight", Flavor_Weight)
print("Flavor Total Weight", Flavor_Weight_Total)
#Grand_Total_Serving_Weight variable name is printer as 'Serving Weight'
print("Serving Weight", Grand_Serving_Total_Weight)
print("Total Weight", Grand_Weight_Mix_Total)

Tags: inputfloatbetainttotalprintservinggrand
2条回答

听起来你应该做一个函数来提示输入,转换成所需的类型,如果失败了,那么发出一条消息再试一次。然后可以为每个数据项调用此函数(而不是直接调用input)。例如:

def get_input(prompt, type_=str):
    while True:
        try:
            return type_(input(prompt))
        except ValueError:
            print(f"Bad input - type {type_.__name__} is needed - try again")

customerName = get_input("Customer Name: ")

L_Citrulline_Mallate = get_input("Amount of L-Citrulline: ", int)

L_Theanine = get_input("Amount of L-Theanine: ", float) / 1000

print(customerName, L_Citrulline_Mallate, L_Theanine)

如果您还想拒绝空字符串输入,那么您也可以对此进行测试。例如:

def get_input(prompt, type_=str, allow_empty=False):
    while True:
        response = input(prompt)
        if response == "" and not allow_empty:
            print("You must enter something")
            continue
        try:
            return type_(response)
        except ValueError:
            print("Bad input - type {} is needed - try again".format(type_.__name__))


customerName = get_input("Customer Name: ")
comment = get_input("Any comment?: ", allow_empty=True)

我假设它只适用于IntFloat类型的输入。然后可以通过以下方式实现:

try:
    num1 = float(input("Enter float"))
    num2 = int(input("Enter Int")) 
    print(num1,num2)
except ValueError:
    print("Hey you have entered the wrong datatype")

相关问题 更多 >