首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果带有list的语句产生不准确的输出

如果带有list的语句产生不准确的输出
EN

Stack Overflow用户
提问于 2022-08-06 15:22:29
回答 3查看 69关注 0票数 -3

守则是:

代码语言:javascript
运行
复制
import random

Cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]

user = int(input("Number\n"))
print(Cards[user])

computer = int(input("Number\n"))
print(Cards[computer])

if Cards[user] > Cards[computer]:
    print(f"You win {user} {computer}")
else:
    print(f"You Lose {computer} {user}")

产出如下:

11

K

12

一个

你赢了11 12

它的意思是说“你输了”,因为K在扑克牌之王中比代表Ace的A低。我在这里做错什么了?

EN

回答 3

Stack Overflow用户

发布于 2022-08-06 15:30:19

也许你应该比较一下按价值订购卡片的索引。

代码语言:javascript
运行
复制
import random

Cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]

user = int(input("Number\n"))
print(Cards[user])

computer = int(input("Number\n"))
print(Cards[computer])

if user > computer:  # Changed here
    print(f"You win {user} {computer}")
else:
    print(f"You Lose {computer} {user}")
票数 1
EN

Stack Overflow用户

发布于 2022-08-06 15:37:24

正如@maggle所指出的,这样做的方法就是比较整数用户和计算机。

比较索引(如@puncher所述)无效,因为Cards.index("11")将返回ValueError (因为整数11不在列表卡中)。

票数 0
EN

Stack Overflow用户

发布于 2022-08-06 15:38:16

发生此行为是因为您比较的是字符串,而不是ints。

对于纸牌游戏,以下排序是正确的

代码语言:javascript
运行
复制
>>> "J"<"Q"<"K"<"A" # <- PSEUDO CODE!
True

但是字符串在默认情况下是按字母顺序排列的主题。

代码语言:javascript
运行
复制
>>> "J"<"Q"<"K"<"A"
False
>>> "A"<"J"<"K"<"Q"
True

因此,条件Cards[user] > Cards[computer]在字符串之间,这就是为什么输出与预期输出不同的原因。

由于“卡片”按升序排列,您只需检查user是否大于computer。这将对ints进行比较,并按您预期的方式工作。

另外,您应该验证从用户那里获得的索引对于列表的长度是有效的。有很多方法可以做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73261013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档