这是我的建议。在应立即验证并清理输入。通常在接受输入时,最好调用.strip()方法,以防用户错误地输入了额外的空格或制表符。在您读取'm'或'd'值之后,强制将其小写;然后代码的其余部分可以假定它是小写的。

当您想对照多个可能的合法值检查一个值时,一个好的Python习惯用法是使用in (value0, value1, value2, ..., valueN)。在本例中,您可以检查in ('m', 'd'),但因为我们检查的是单个字符,所以实际上我们可以只检查in "md",这也可以。

当您希望允许空字符串或整数时,只需将响应读入临时变量(我使用名称s表示“string temporary variable”),然后可以检查零长度字符串;如果它不是零长度,则转换为整数。您可以将整型变量初始化为负值,然后循环直到它不是负值;但是我更喜欢使用while True:循环并添加一个显式的break来显示发生的成功条件。(注意:如果这是家庭作业,您的老师可能不同意我的观点;有些老师不喜欢看到break在一个循环中,而是宁愿只在顶部测试循环。)

我添加了一些错误消息。我在我的文本周围加上“@@@@@”,以确保你能找到所有的文本并将其本地化为您的语言。(这是一个很短的程序,你很可能已经找到了所有的东西,但我想让你尽可能简单。)

我没有对浮点数调用int()将它们转换为整数,而是使用了round(),这样77.9将变成78而不是77。

编辑:我刚刚编辑了代码。我将输入验证分解为一个函数,并传入一个“validator”函数。我觉得这样比较干净。

代码:

# Karvonens formel
#
print(
"""
Kalkulere dine treningssoner for lett lping, anaerob terskel (AT) og VO2 Max treningskter.
Instruksjoner
1. Fyll inn din alder, hvilepuls og kjnn.
2. Skriv inn din maksimale hjertefrekvens, hvis du vet det, ellers trykk enter - deretter beregnet programmet det selv som flger:
(Menn 214 - (0,8 * alder) Kvinner:. 209 - (0,7 * alder).
3. Treningssonenes verdier beregnes ved hjelp av Karvonen formelen:
X% = (Maksimal hjertefrekvens hvilepuls) * x/100) + hvilepuls
"""
)
kjonn=' '
alder=0
hvilepuls=0
makpuls=' '
def check_positive(n):
if n > 0:
return True
else:
print("@@@@@ Cannot enter a negative or 0 value! @@@@@")
return False
def check_positive_or_zero(n):
if n >= 0:
return True
else:
print("@@@@@ Cannot enter a negative value! @@@@@")
return False
def get_input_int(s_mesg, fn_validate, default=None):
while True:
s = input(s_mesg).strip()
if not s and default is not None:
return default
# not a default value; try it as an int
try:
n = int(s)
except ValueError:
print("@@@@@ Not even an integer! @@@@@")
continue
# works as an int; is it valid?
if fn_validate(n):
return n
while kjonn not in ('m', 'd'):
kjonn = input("Hvilken kjnn er du? (M)ann/(D)ame\t").strip().lower()
alder = get_input_int("Hvor mange r er du?\t", check_positive)
hvilepuls = get_input_int("Hva er din hvilepuls?\t", check_positive)
makspuls = get_input_int("Hva er din makspuls?\t", check_positive_or_zero, default=0)
if not makspuls:
if kjonn == 'm':
makspuls = int(214 - 0.8*int(alder))
else:
makspuls = int(209 - 0.7*int(alder))
prosent60 = (makspuls-hvilepuls)*0.6 + hvilepuls
prosent75 = (makspuls-hvilepuls)*0.75 + hvilepuls
prosent85 = (makspuls-hvilepuls)*0.85 + hvilepuls
prosent90 = (makspuls-hvilepuls)*0.9 + hvilepuls
# Remove decimals
prosent60 = round(prosent60)
prosent75 = round(prosent75)
prosent85 = round(prosent85)
prosent90 = round(prosent90)
print("\n\n")
if kjonn == 'm':
print("Din kjnn er:\t\tMann")
else:
print("Din kjnn er:\t\tDame")
print("Din alder er:\t\t", alder)
print("Din hvilepuls er:\t", hvilepuls," slag/min")
print("Din makspuls er:\t", makspuls," slag/min")
print("\n\n")
print("Din lavsone er:\t",prosent60,"-",prosent75," slag/min")
print("Din ATsone er:\t",prosent85,"-",prosent90," slag/min")
print("Din VO2max er:\t",prosent90,"-",makspuls," slag/min")
input("\n\nTrykk enter for avslutte")