'\r' 是做什么的,在给定的场景中我将如何使用它? (Python)
what does '\r' do and how would I use it in a given scenario? (Python)
我一直在尝试为纸牌游戏制作程序,快速总结:编写一个 python 脚本来创建随机纸牌,将纸牌表示为元组,存储纸牌值和颜色.
其中一个条件是,当我循环 3 次时,我必须确保每张卡片的值和颜色都与其余卡片不同,这样就没有两张卡片是相同的。 (创建第二张卡片时,检查是否与第一张相同,如果相同,请重试。
创建第三张卡时,检查是否与第一张相同
或者第二个,如果是,再试一次。)
然后我必须创建一个函数,将 3 张牌的价值加在一起 returns
总和。
当然,还有更多,但我的问题很简单。到目前为止我所做的:
import random
num = random.randint(0,9)
colour = random.choice(["red", "green", "blue", "yellow"])
card = (num, colour)
def get_uno_card(card):
for _ in range(1):
print(card)
if num and colour == card:
print(card)
return card
def convert():
a = str(card)
return a
def add():
b = num * 3
return b
a = convert()
b = add()
print(get_uno_card(card))
print(a)
print(b)
这输出:
(6, 'blue')
(6, 'blue')
(6, 'blue')
18
我无法确保卡片不相同,因此我正在寻找在线执行此操作的方法,post 他们解释说我应该使用“/r”。我没有遇到过这个,也不知道在这种情况下我应该如何使用它,或者我是否应该使用它。
谁能解释一下我如何检查这 3 个元组是否相同,如果相同,我将如何生成另一张卡片来代替它?
\r
是 carriage return character, and has nothing at all to do with the problem you're describing, which is one of sampling without replacement.
确保您没有两次拥有同一张卡片的简单方法是制作 所有 张卡片的“套牌”(在 Python 中是很容易表示为 list
) 而不是单独生成每张卡片。
对于一副真正的纸牌,你不能两次得到同一张牌,因为你在发牌时将牌从牌堆中移除; list
以同样的方式使用你的 pop
ping 项目。
>>> import random
>>> cards = [(num, color) for num in range(10) for color in ["red", "green", "blue", "yellow"]]
>>> random.shuffle(cards)
>>> cards.pop()
(3, 'blue')
>>> cards.pop()
(4, 'yellow')
>>> cards.pop()
(5, 'blue')
将此放在您已经尝试实施的一些事情的上下文中:
import random
deck = [
(num, color)
for num in range(10)
for color in ("red", "green", "blue", "yellow")
]
random.shuffle(deck)
def get_uno_card():
return deck.pop()
def add_cards(cards):
return sum(num for num, color in cards)
cards = [get_uno_card() for _ in range(3)]
print(cards)
print(add_cards(cards))
[(9, 'yellow'), (9, 'blue'), (3, 'yellow')]
21
我一直在尝试为纸牌游戏制作程序,快速总结:编写一个 python 脚本来创建随机纸牌,将纸牌表示为元组,存储纸牌值和颜色.
其中一个条件是,当我循环 3 次时,我必须确保每张卡片的值和颜色都与其余卡片不同,这样就没有两张卡片是相同的。 (创建第二张卡片时,检查是否与第一张相同,如果相同,请重试。
创建第三张卡时,检查是否与第一张相同 或者第二个,如果是,再试一次。)
然后我必须创建一个函数,将 3 张牌的价值加在一起 returns 总和。
当然,还有更多,但我的问题很简单。到目前为止我所做的:
import random
num = random.randint(0,9)
colour = random.choice(["red", "green", "blue", "yellow"])
card = (num, colour)
def get_uno_card(card):
for _ in range(1):
print(card)
if num and colour == card:
print(card)
return card
def convert():
a = str(card)
return a
def add():
b = num * 3
return b
a = convert()
b = add()
print(get_uno_card(card))
print(a)
print(b)
这输出:
(6, 'blue')
(6, 'blue')
(6, 'blue')
18
我无法确保卡片不相同,因此我正在寻找在线执行此操作的方法,post 他们解释说我应该使用“/r”。我没有遇到过这个,也不知道在这种情况下我应该如何使用它,或者我是否应该使用它。
谁能解释一下我如何检查这 3 个元组是否相同,如果相同,我将如何生成另一张卡片来代替它?
\r
是 carriage return character, and has nothing at all to do with the problem you're describing, which is one of sampling without replacement.
确保您没有两次拥有同一张卡片的简单方法是制作 所有 张卡片的“套牌”(在 Python 中是很容易表示为 list
) 而不是单独生成每张卡片。
对于一副真正的纸牌,你不能两次得到同一张牌,因为你在发牌时将牌从牌堆中移除; list
以同样的方式使用你的 pop
ping 项目。
>>> import random
>>> cards = [(num, color) for num in range(10) for color in ["red", "green", "blue", "yellow"]]
>>> random.shuffle(cards)
>>> cards.pop()
(3, 'blue')
>>> cards.pop()
(4, 'yellow')
>>> cards.pop()
(5, 'blue')
将此放在您已经尝试实施的一些事情的上下文中:
import random
deck = [
(num, color)
for num in range(10)
for color in ("red", "green", "blue", "yellow")
]
random.shuffle(deck)
def get_uno_card():
return deck.pop()
def add_cards(cards):
return sum(num for num, color in cards)
cards = [get_uno_card() for _ in range(3)]
print(cards)
print(add_cards(cards))
[(9, 'yellow'), (9, 'blue'), (3, 'yellow')]
21