Python猜数字游戏问题:if语句失效、投注限制异常
问题分析与代码修复
投注50+金币被限制的原因
你把coins和bet都定义成了字符串类型,字符串比较是按字符的ASCII值来的,不是数字大小。比如"50"和"100"比的时候,第一个字符"5"的ASCII值比"1"大,所以会判定"50" > "100"为True,直接触发投注超限的提示。
猜对错判断失效的原因
highlow是input()返回的字符串,你却拿它和整数1、2比,永远不可能相等,所以所有判断分支都走不进去;num1和num2也被转成了字符串,数字比较逻辑全错——比如字符串"10"会被认为比"9"小;- 后面写的
elif num2 < num1和前面的if num1 > num2是完全一样的条件,纯冗余,还没处理两个数字相等的情况。
修复后的完整代码
import random import time coins = 100 # 改成整数,别用字符串 print(f"you have {coins} coins") num1 = random.randint(1, 20) # 保留整数类型 print(num1) # input里直接写提示,不用套print highlow = input("do you think the next number between 1 and 20 is higher(1) or lower(2): ") # 把投注金额转成整数,顺便处理输入非数字的情况 try: bet = int(input("how much coins do you want to bet? ")) except ValueError: print("请输入有效的数字") time.sleep(3) quit() if bet == coins: print("you bet all your coins") elif bet > coins: print(f"you can't bet that many coins, you only have {coins} coins") time.sleep(3) quit() else: print(f"you bet {bet} coins") time.sleep(3) num2 = random.randint(1, 20) print(f"the second number was {num2}") time.sleep(1) # 正确的数字比较逻辑 if num1 > num2: if highlow == "2": print("the second number was lower, you won") coins += bet elif highlow == "1": print("the second number was lower, you lost") coins -= bet else: print("输入无效,请选择1或2") elif num1 < num2: if highlow == "1": print("the second number was higher, you won") coins += bet elif highlow == "2": print("the second number was higher, you lost") coins -= bet else: print("输入无效,请选择1或2") else: print("两个数字相等,平局") time.sleep(1) print(f"you have {coins} coins")
核心修复点
- 把
coins、bet、num1、num2都改成整数类型,确保数字比较逻辑正确; - 修正
input()的用法:input()本身可以直接传提示文本,不需要嵌套print(); - 调整
highlow的比较:要么把它转成整数,要么和字符串"1"/"2"比较; - 补充了数字相等的处理分支,以及无效输入的提示;
- 用f-string替代字符串拼接,代码更简洁。
内容的提问来源于stack exchange,提问作者Miro
相关产品推荐
相关产品推荐

