执行字符串检查时出现“索引器错误:列表索引超出范围”

2024-09-29 01:26:32 发布

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

理想情况下,我希望能够提示用户“小”或“S”,“中”或“M”和“大”或“L”时,确定饮料的价格。这都是不区分大小写的,所以“s”或“smaLL”是好的,等等。如果我只输入一个“M”,我会得到一个超出范围的索引代码的错误,它会作为一个小的。一个大的给我一个中等的。救命啊?你知道吗

print("Ie. 'S', 'M', 'L', 'Small', 'Medium, 'Large'" +
      " or any variations in their letter case sensitivity will work.")
beverageSize = str(input("Input your desired size: "))
print("")

if len(beverageSize) > 1 and len(beverageSize) < 5:
  exit(print("Error with choice of beverage input."))

elif beverageSize.startswith("S") or beverageSize.startswith("s") and\
            beverageSize is beverageSize.isalpha() and len(beverageSize) == 0 or len(beverageSize) == 4 or\
            beverageSize[0] == "S" or beverageSize[0] == "s" and\
            beverageSize[1] == "M" or beverageSize[1] == "m" or beverageSize[1] == "" and\
            beverageSize[2] == "A" or beverageSize[2] == "a" or beverageSize[2] == "" and\
            beverageSize[3] == "L" or beverageSize[3] == "l" or beverageSize[3] == "" and\
            beverageSize[4] == "L" or beverageSize[4] == "l" or beverageSize[4] == "" and\
           len(beverageSize) != 5:

        beverageSize = SMALL_SIZE
        print("SMALl")


elif beverageSize.startswith("M") or beverageSize.startswith("m") and\
            beverageSize is beverageSize.isalpha() and\     len(beverageSize) == 0 or len(beverageSize) == 5 or \
            beverageSize[0] == "M" or beverageSize[0] == "m" and\
            beverageSize[1] == "E" or beverageSize[1] == "e" or beverageSize[1] == "" and\
            beverageSize[2] == "D" or beverageSize[3] == "d" or beverageSize[3] == "" and\
            beverageSize[3] == "I" or beverageSize[3] == "i" or beverageSize[3] == "" and\
            beverageSize[4] == "U" or beverageSize[4] == "u" or beverageSize[4] == "" and\
            beverageSize[5] == "M" or beverageSize[5] == "m" or beverageSize[5] == "":

        beverageSize = MEDIUM_SIZE
        print("MEDIUM")

Tags: orand用户inputsizelenis情况
2条回答

在python中有更聪明的方法来测试变量的值。一个使用if-else条件的方法已经在注释中suggested。下面是另一个使用dict的简短方法:

size_dict = {'s' : SMALL_SIZE, 'small' : SMALL_SIZE, 
             'm' : MEDIUM_SIZE,'medium' : MEDIUM_SIZE,
             'l' : LARGE_SIZE, 'large' : LARGE_SIZE}
beverageSize = size_dict.get(beverageSize.lower(), 'Invalid Size')

它使用dict.get来提取与输入相关的值。如果用户输入了字典中不存在的关键字,则beverageSize被分配值Invalid Size。你知道吗

首先,您的程序将无法工作,因为对于允许的值,这始终是正确的:

if len(beverageSize) > 1 and len(beverageSize) < 5:
  exit(print("Error with choice of beverage input."))

然后,让自己休息一下,避免所有的小写/大写检查,在比较东西之前只使用这个:

bevarageSize = bevarageSize.lower()

现在开始比较:

if (beverageSize == 's' or bevarageSize == 'small'):
  print 'small'
elif (beverageSize == 'm' or bevarageSize == 'medium'):
  print 'medium'
elif (beverageSize == 'l' or bevarageSize == 'large'):
  print 'large'

或者更好,使用真正的Python风格:

if (beverageSize in ('s', 'small')):
  print 'small'
elif (beverageSize in ('m', 'medium')):
  print 'medium'
elif (beverageSize in ('l', 'large')):
  print 'large'

相关问题 更多 >