Python游戏While循环问题:如何实现答对时终止循环
Instagram粉丝对比问答游戏修复方案
问题说明
开发了一款基于Instagram账号粉丝数对比的问答游戏,当前存在核心问题:用户答对时循环随即停止,实际需求是循环持续运行,直到用户答对才终止,尝试在答对判断中添加continue未解决问题。
问题根源
- 代码存在强制终止逻辑:
if count ==2: break,会在第二次循环时直接终止程序 - 循环逻辑完全搞反:需求是「答错继续,答对终止」,但原代码答对用
continue(继续循环),且count变量强制限制了循环次数 score变量在循环内初始化,每次循环都会重置为0,无法累计得分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
相关产品推荐
相关产品推荐

