我做了一个简单的程序,根据看到的纸牌告诉用户纸牌中还剩下哪些纸牌。如果看一下代码,您会发现有多个if语句可以做几乎相同的事情。有人可以帮我浓缩这些吗?
for card in cards_seen:
if card.endswith('C') == True:
Deck["clubs"].remove(card)
if card.endswith('D') == True:
Deck["diamonds"].remove(card)
if card.endswith('H') == True:
Deck["hearts"].remove(card)
if card.endswith('S') == True:
Deck["spades"].remove(card)
答案 0 :(得分:6)
您可以使用字典来简化代码:
card_suits = {
'C': 'clubs',
'D': 'diamonds',
'H': 'hearts',
'S': 'spades'
}
for card in cards_seen:
suit = card_suits[card[-1]]
Deck[suit].remove(card)
一些评论:
== True
。 text[-1]
来获取最后一个字符,但是,.endswith
是更通用的方法。答案 1 :(得分:1)
是的,有可能。
第1步:删除与True
的冗余比较:
if card.endswith('C'):
Deck["clubs"].remove(card)
if card.endswith('D'):
Deck["diamonds"].remove(card)
if card.endswith('H'):
Deck["hearts"].remove(card)
if card.endswith('S'):
Deck["spades"].remove(card)
第2步:仅进行1个remove
方法调用
for card in cards_seen:
deck = None
if card.endswith('C'):
deck = Deck["clubs"]
if card.endswith('D'):
deck = Deck["diamonds"]
if card.endswith('H'):
deck = Deck["hearts"]
if card.endswith('S'):
deck = Deck["spades"]
deck.remove(card)
第3步:使用词典进行套牌映射
card_to_deck = { 'C':"clubs", 'D': "diamonds", 'H':"hearts", 'S':"spades"}
for card in cards_seen:
deckname = card_to_deck[card[-1]]
Deck[deckname].remove(card)
答案 2 :(得分:0)
首先,您可以删除无用的package main
import (
"github.com/unidoc/unioffice/document"
"io/ioutil"
"log"
"os"
)
func main() {
_, err := ioutil.ReadFile("filled-form.docx")
if err == nil {
err = os.Remove("filled-form.docx")
if err != nil {
log.Fatal(err)
}
}
doc, err := document.Open("form.docx")
if err != nil {
log.Fatalf("error opening form: %s", err)
}
for _, f := range doc.FormFields() {
if f.Type() == document.FormFieldType(1) {
f.SetValue("test")
}
}
for _, f := range doc.FormFields() {
log.Println("-------------------")
log.Println(f.Name())
log.Println(f.Value())
}
err = doc.SaveToFile("filled-form.docx")
if err != nil {
log.Fatal(err)
}
}
指令。
您可以创建这样的字典:
== true
然后您可以像这样简化源代码:
card_map = { 'C': "clubs", 'D': "diamonds", 'H': "hearts", 'S': "spades" }
说明: