gpt4 book ai didi

python - 列表索引必须是整数而不是 str(可能是简单的答案)

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:53 24 4
gpt4 key购买 nike

我最近在之前的帖子中问了一个关于高分问题的问题。这是一个类(class)项目,所以应该比较简单。我还是这个网站的新手,所以我不确定如何干净地发布新的修订版,所以如果您已经阅读了其中的一部分,我深表歉意。这次我只是要把整个程序放在这里。除了高分部分,一切正常。当我选择在玩游戏之前只检查高分列表时,输出效果很好,但是,在玩游戏后,返回主菜单然后再次检查高分我得到错误

list indices must be integers not str

.我认为这意味着我的原始分数列表设置不正确,但我不完全确定。这是代码,我非常感谢您的帮助。这个网站非常适合这样的人。

import random
loop_game = True

while loop_game:
questions= [
{"question": "Who won the 2012 NFL Superbowl?",
"answers": ["Jacksonville Jaguars",
"Oakland Raiders",
"New York Giants",
"Baltimore Ravens"],
"correct": "4"},
{"question": "Which song was at the top of the charts in early 2001, by OutKast?",
"answers": ["Bootylicious",
"Angel",
"Ms. Jackson",
"U Got It Bad"],
"correct": "3"},
{"question": "How many centimeters are one inch?",
"answers": ["2.12",
"2.54",
"3.24",
"3.38"],
"correct": "2"}]

scores=[{'initials': None,
'score': -500}]

#main menu
def main_menu():
global loop_game
print("""
***********************************************
Welcome to The Greatest Trivia Show on Earth!!!
***********************************************
1. Play Game
2. High Scores
3. Credits
4. Instuctions
5. Quit
""")
needs_input = True
while needs_input:
selection = input("Which Selection would you like? ")
if selection == "1":
play_game()
needs_input = False
elif selection == "2":
display_scores()
needs_input = False
elif selection == "3":
credits()
needs_input = False
elif selection == "4":
instructions()
needs_input == False
elif selection == "5":
needs_input = False
loop_game = False
else:
print("\nSelect a valid option\n")

def play_game():
#definitions
global total_points
global questions
loop_pa = True
total_points = 3
random.shuffle(questions)
counter = 0
#gets name in case of high score
global hs_name
hs_name = input("What are your initials?: ")


#main play loop
while counter < 2:
for j in questions:
counter += 1
print("\n",j["question"])
for i, choice in enumerate(j["answers"]):
print(str(i+1) + ". " + choice)
answer = str(input("\nChoose an answer 1-4: "))
if answer == j["correct"]:
print("\nGood job! You keep your precious points...this time!\n")
else:
print("\nSorry, that is not correct. You lose one point.\n")
total_points -= 1
print("\nTotal Points: ", total_points)

#all questions have been read
print("\nThat's it, your score is: ", total_points)

#check/append best scores list
best_scores()

#keep playing loop
while loop_pa:
keep_playing = input("Play again? (y, n) \n")
if keep_playing == "y":
print("\nAwesome! Here we go! \n\n")
loop_pa = False
play_game()
elif keep_playing == "n":
print("Ahh, too bad. Thanks for playing!")
loop_pa = False
main_menu()
else:
print("Select a valid option\n")

def best_scores():
for i, score in enumerate(scores):
if total_points > score['score']:
scores[i:i+1] = {'initials': hs_name, 'score': total_points}
del scores[5:]
break

def display_scores():
print("HIGH\tSCORES")
for score in scores:
print(score['initials'], "\t", score['score'])

def instructions():
print("""

*************
Instructions
*************
The game is quite simple: You start out with 12 points.
You lose a point for every incorrect answer.
If you get an answer correct, your score stays the same
and you move forward through the question set. Try to
see how many points you can keep!
""")
main_menu()

def credits():
print("\nCreated by Jessica Gregg and Jason Vignochi\n")
main_menu()


main_menu()

编辑:哦!错误所在的行在 display_scores 函数中(第 119 行)

print(score['initials'], "\t", score['score'])

最佳答案

你正在用 best_scores() 搞乱你的 scores。第一次通过后,它看起来像 ['score', 'initials']。切片赋值需要一个可迭代对象,并且当用作可迭代对象时,果然字典会遍历它的键。试试这个,看起来更简单一些(虽然我可能只是追加和排序):

def best_scores():
global scores
for i, score in enumerate(scores):
if total_points > score['score']:
scores.insert(i, {'initials': hs_name, 'score': total_points})
scores = scores[:5]
break

我的方式:

from operator import itemgetter

def best_scores():
global scores
scores.append({'initials': hs_name, 'score': total_points})
scores = sorted(scores, key=itemgetter('score'), reverse=True)[:5]

关于python - 列表索引必须是整数而不是 str(可能是简单的答案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com