You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

验证逻辑

修正后:

  1. self.states_list始终保持完整的州名列表,check_if_exists可以正确判断输入的州名是否存在。
  2. 每次调用print_state时,用临时变量state_data获取单个州的坐标数据,不会影响原始的州名列表。
  3. 输入正确的州名后,会持续在地图对应位置打印州名,直到猜完50个州。

内容的提问来源于stack exchange,提问作者Carlos Chaires

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:17:02