所以我正在为学校的代码工作,我不太了解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!")
答案 0 :(得分:1)
您正在设置valid_scores=True
,它会使用布尔值True
覆盖您的有效分数列表。然后,当您检查player_input!=valid_scores
时,它将始终返回False。
您要做的是摆脱valid_scores=True
行,使用player_input
将int(player_input)
强制转换为整数,然后选中int(player_input) in valid_scores
。如果玩家输入的字符串可以转换为valid_scores
中的一个整数,则返回True。
答案 1 :(得分:1)
在您的代码中,您将列表(有效值)与字符串(输入)进行比较。这意味着您必须在列表中提供正确的语句。正确的方法是input in valid_inputs
,它会检查valid_inputs
列表中的任何元素是否等于变量input
。您还要将True
分配给valid_inputs,这实际上会删除该列表。另一个错误是player1
和scores_for_player
变量未在您的代码中定义。要修复代码,您必须将输入转换为整数,必须重命名存储输入有效的变量,必须声明变量player1
和scores_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
列表中。