使用 while 循环让用户尝试 3 次输入有效值

Using the while loop to give the user 3 attempts for a valid input value

counter = 0
miles = float(input('How many miles do you want converted into kilometers? '))
while miles < 0:
    print('You cannot enter a negative value!')
    miles = float(input('Enter the correct number of miles: '))
    counter = counter + 1
    if counter > 2:
        break
if counter <= 2:
    milesToKm = (miles*1.6)
    print(miles, 'miles is', round(milesToKm,2), 'kilometers')
else:
    print('Error: cannot exceed three attempts')
    exit()

大家好。这是我学习编码的第五周。我应该创建一个程序,让用户尝试输入有效值 3 次。如果第三次尝试的值无效(负数),则会提示错误信息并终止。

问题是我可以输入两个无效值,然后输入一个有效值,它仍然给出错误消息并终止。该程序应计算第三个有效值并进行数学运算,然后打印转换结果。

例如:

您要将多少英里换算成千米? -1

不能输入负值!

输入正确的英里数:-1

不能输入负值!

输入正确的英里数:5

错误:不能超过三次尝试

你们能帮忙吗?

这只是管理两个退出条件时的一个小混乱。在 while 语句中检查它们,你会没事的。我用序列 (-1, -1, -1)、(-1, -1, 5) 和 (-1, 5) 对此进行了测试。每次都很好。

counter = 0
miles = float(input('How many miles do you want converted into kilometers? '))
while miles < 0 and counter <= 2:
    print('You cannot enter a negative value!')
    miles = float(input('Enter the correct number of miles: '))
    counter = counter + 1

if counter <= 2:
    milesToKm = (miles*1.6)
    print(miles, 'miles is', round(milesToKm,2), 'kilometers')
else:
    print('Error: cannot exceed three attempts')
    exit()

另一种处理方法是使用循环的 else 子句。如果你正常退出循环,它的 else 子句被执行;如果您 break 退出循环,则 else 将被跳过。这使您可以使用 for 循环处理您的逻辑:

for counter in range(3):
    miles = float(input('How many miles do you want converted into kilometers? '))
    if miles >= 0:
        break
    print('You cannot enter a negative value!')

else:
    print('Error: cannot exceed three attempts')
    exit()

milesToKm = (miles*1.6)
print(miles, 'miles is', round(milesToKm,2), 'kilometers')

你的问题是,在你完成顶部的 while 循环后,你的计数器将大于 2。即 3。现在,你的 print 函数在 if counter <= 2 语句。 3不小于等于2,那是你的问题

counter = 0

while miles < 0:
    # ...
    if counter > 2:
        print('Error: cannot exceed three attempts')
        break

print(miles, 'miles is', round(milesToKm,2), 'kilometers')