我不太了解python中的while循环

时间:2016-01-05 17:03:51

标签: python while-loop

def AddSingleCard(self):
   symbols = ['heart', 'diamond', 'club', 'spade']
   #newCardSign = ''
   newCardNumber, newCardSign = raw_input().split()
   try:
       newCardNumber = int(float(newCardNumber))
   except:
       newCardNumber, newCardSign = raw_input().split()
   while (newCardNumber not in (2,15) or newCardSign not in symbols):
      newCardNumber, newCardSign = raw_input().split()
   newCard = [newCardNumber, newCardSign]

我试图循环,直到输入将是2-15之间的数字,并且字符串将是其中一个符号,但只有当错误的输入是数字时,while循环才适用于我,如果数字在范围内而字符串不在,程序只是停留在while行中,等待下一行输入,而不是下到下一行并将输入输入到正确的位置...... 我相信它与我的while循环的语法有关,但我不能指出问题所在。 (我的编程背景是c,我是python的新手)

TNX!

2 个答案:

答案 0 :(得分:1)

如果你知道C,你可能想要使用do ... while循环,因为循环体必须至少执行一次。但是在Python中没有do ... while循环这样的东西。如果满足您的条件,您必须从while True:break开始。

def AddSingleCard(self):
   symbols = ['heart', 'diamond', 'club', 'spade']

   while True: 
       newCardNumber, newCardSign = raw_input("Enter card number and sign (heart, diamond, club, spade), seperated by space").split()
       try:
           newCardNumber = int(newCardNumber)
       except ValueError:
           print "Card number must be a number between 2 and 15"
           continue

       if newCardNumber in range(2,16) and newCardSign in symbols:
              break

       print "Card number or symbol not valid"

   newCard = [newCardNumber, newCardSign]

答案 1 :(得分:0)

def AddSingleCard():
    symbols = ['heart', 'diamond', 'club', 'spade']
    newCardNumber = newCardSign = None
    while (newCardNumber not in range(2, 16) or newCardSign not in symbols):
        newCardNumber, newCardSign = raw_input('Enter Number and Symbol with space between:').split()
        try:
            newCardNumber = int(newCardNumber)
        except:
            continue
    newCard = [newCardNumber, newCardSign]
    return newCard


AddSingleCard()
  1. newCardNumber转换为int
  2. 将(2,15)更改为范围(2,16)