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

Python游戏While循环问题:如何实现答对时终止循环

Instagram粉丝对比问答游戏修复方案

问题说明

开发了一款基于Instagram账号粉丝数对比的问答游戏,当前存在核心问题:用户答对时循环随即停止,实际需求是循环持续运行,直到用户答对才终止,尝试在答对判断中添加continue未解决问题。

问题根源

  1. 代码存在强制终止逻辑:if count ==2: break,会在第二次循环时直接终止程序
  2. 循环逻辑完全搞反:需求是「答错继续,答对终止」,但原代码答对用continue(继续循环),且count变量强制限制了循环次数
  3. score变量在循环内初始化,每次循环都会重置为0,无法累计得分
  4. randomIndexValue函数在循环内部重复定义,属于不良编码习惯

修改后的完整代码

# 导入依赖库
from bs4 import BeautifulSoup 
import requests 
import pandas as pd
from io import StringIO 
import random 

url = 'https://en.wikipedia.org/wiki/List_of_most-followed_Instagram_accounts'

page = requests.get(url)
soup = BeautifulSoup(StringIO(page.text), 'html') 
# 清洗表格数据
for t in soup.select('[title="Yes"]'):
    t.replace_with("Yes")
df = pd.read_html(page.text)[0]
df = df.drop(index=(50))
df['Followers (millions)'] = df['Followers (millions)'].astype(float)
# 获取列名
column_names = list(df.columns)

# 随机索引生成函数(移到循环外,避免重复定义)
def randomIndexValue():
    return random.randint(1,49)

# 游戏初始化
answer = ''
score = 0  # 移到循环外,避免每次重置得分

# 游戏主循环
while True:
    # 生成随机对比项A
    index = randomIndexValue()
    item_A = [df.iloc[index][column_names[1]], df.iloc[index][column_names[2]], df.iloc[index][column_names[5]], df.iloc[index][column_names[6]], df.iloc[index][column_names[4]]]
    print(f'对比项A:{item_A[1]} 是来自{item_A[3]}的{item_A[2]},拥有{item_A[4]}百万粉丝')

    # 生成随机对比项B
    index = randomIndexValue()
    item_B= [df.iloc[index][column_names[1]], df.iloc[index][column_names[2]], df.iloc[index][column_names[5]], df.iloc[index][column_names[6]], df.iloc[index][column_names[4]]]
    print(f'对比项B:{item_B[1]} 是来自{item_B[3]}的{item_B[2]},拥有{item_B[4]}百万粉丝')

    # 判断正确答案
    if item_A[4] > item_B[4]:
        answer = 'A'
        print(f'正确答案提示:A({item_A[1]})的粉丝数多于B({item_B[1]})') 
    else: 
        answer = 'B'
        print(f'正确答案提示:B({item_B[1]})的粉丝数多于A({item_A[1]})')
    
    # 获取用户输入
    question = input('哪个账号的粉丝更多?\n输入A或B:').upper()    
    
    # 判断用户答案并控制循环
    if question == answer: 
        print('回答正确!')
        score += 100
        break  # 答对后终止循环
    else: 
        print("回答错误,请重试!")
        continue  # 答错后继续循环

print(f'你的最终得分:{score}')      

关键修改点

  • 移除了count变量及强制终止的break逻辑,让循环仅由答对条件控制
  • 将randomIndexValue函数移到循环外部,避免每次循环重复定义函数
  • 把score初始化移到循环外,确保得分可以正常累计
  • 调整循环控制逻辑:答对时用break终止循环,答错时用continue继续循环
  • 优化了正确答案的判断逻辑(直接用大于号代替max函数,更直观)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:02:05