为什么我的循环不遵循其条件?

时间:2018-02-11 18:13:57

标签: python

所以我正在为学校的代码工作,我不太了解python。有人可以告诉我为什么我的循环在输入是有效分数的一部分时仍然输出无效分数。因此,如果我输入1,它将说无效分数,但它应该是有效的,因为我设置变量valid_scores = [0,1,2,3,4,5,6,7,8,9,10]。 此代码必须允许用户为六个不同的组输入5个输入,然后添加到列表中,该列表将找到列表的总和和列表的平均值。

代码:

valid_scores =[0,1,2,3,4,5,6,7,8,9,10]

for group in groups: 
    scores_for_group = []
    valid_scores_loops=0
    print("What do you score for group {group_name} as a player?"\
         .format(group_name=group))
    while valid_scores_loops < 5:
        valid_scores=True
        player_input =input("* ")
        if player_input==valid_scores:
            player1.append(player_input)
            scores_for_player.append(int(player_input))
        else:
            if player_input!=valid_scores:
                valid_scores= False
                print("Invalid score!")    

2 个答案:

答案 0 :(得分:1)

您正在设置valid_scores=True,它会使用布尔值True覆盖您的有效分数列表。然后,当您检查player_input!=valid_scores时,它将始终返回False。

您要做的是摆脱valid_scores=True行,使用player_inputint(player_input)强制转换为整数,然后选中int(player_input) in valid_scores。如果玩家输入的字符串可以转换为valid_scores中的一个整数,则返回True。

答案 1 :(得分:1)

在您的代码中,您将列表(有效值)与字符串(输入)进行比较。这意味着您必须在列表中提供正确的语句。正确的方法是input in valid_inputs,它会检查valid_inputs列表中的任何元素是否等于变量input。您还要将True分配给valid_inputs,这实际上会删除该列表。另一个错误是player1scores_for_player变量未在您的代码中定义。要修复代码,您必须将输入转换为整数,必须重命名存储输入有效的变量,必须声明变量player1scores_for_player,并且可能应该使用下面的修复程序调整您的代码。

您还可以将while valid_score_loops < 5替换为for valid_score_loops in range(5)来改进代码,因为您不会在循环中更改valid_score_loops。另一种表达[0,1,2,3,4,5,6,7,8,9,10]的方法是将其转换为元组:(0,1,2,3,4,5,6,7,8,9,10)或将其表示为范围:range(0, 11)

范围是包含一系列数字的列表和元组之类的对象。 range方法的签名是:

  • range(end) start相当于0和step到1
  • range(start, end) step相当于1
  • range(start, end, step)

它将从start开始,每次增加step,在end之前结束。
示例:

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(3, 5))
[3, 4]
>>> list(range(1, 6, 2))
[1, 3, 5]

您的代码还有另一项优化。如果输入无效,则无效,因此您无需在代码中进行检查。要解决这个问题,您可以删除检查,如果参数不在valid_scores子句中的else列表中。