Python猜谜游戏:while循环中方法仅首次执行问题求助
问题分析与解决方案
问题根源
核心问题是**print_state方法意外覆盖了存储所有州名的self.states_list变量**,导致后续的check_if_exists判断完全失效:
- 首次调用
print_state时,self.states_list = data[data.state == a_state]把原本的州名列表替换成了单个州的DataFrame行对象。 - 之后
check_if_exists里的a_state in self.states_list实际是在遍历DataFrame的列名(如state、x、y),而非州名,所以后续输入的正确州名永远无法匹配,也就不会执行打印操作。
修正代码
修改List.py中的check_if_exists和print_state方法,避免覆盖原始的州名列表:
def check_if_exists(self, a_state): return a_state in self.states_list def print_state(self, a_state): # 使用临时变量存储匹配的州数据,不修改self.states_list state_data = self.data[self.data.state == a_state] self.t.goto(int(state_data.x), int(state_data.y)) # 直接使用传入的a_state即可,无需调用item() self.t.write(a_state, align=ALIGNMENT, font=FONT)
同时确保State类的初始化方法中,self.states_list是完整的州名列表(需从CSV文件提取):
import pandas as pd import turtle ALIGNMENT = "center" FONT = ("Arial", 8, "normal") class State: def __init__(self): self.data = pd.read_csv("50_states.csv") # 初始化时存储完整的州名列表 self.states_list = self.data.state.to_list() self.t = turtle.Turtle() self.t.hideturtle() self.t.penup()
验证逻辑
修正后:
self.states_list始终保持完整的州名列表,check_if_exists可以正确判断输入的州名是否存在。- 每次调用
print_state时,用临时变量state_data获取单个州的坐标数据,不会影响原始的州名列表。 - 输入正确的州名后,会持续在地图对应位置打印州名,直到猜完50个州。
内容的提问来源于stack exchange,提问作者Carlos Chaires
相关产品推荐
相关产品推荐

