簡體   English   中英

if 語句中的 else 分支無法正常工作(python)

[英]The else branch in the if statement doesnt work properly (python)

當我輸入像“9”這樣的數字時,我希望結果將是“僅接受 1 ~ 6 之間的數字”,但 else 語句實際上被忽略並通過。

主文件

def select_class():

  while True:
    try:
      class_number = int(input('Select number below\n (1)12:00~13:30\n (2)13:35~15:05\n (3)15:45~17:15\n (4)17:20~18:50\n (5)18:55~20:30\n (6)20:25~22:00\n---------------\n'))
      class_text = input('Leave a comment if you have\n')
  
  if re.match(r'[1-6]', class_number):
    if class_number == 1:
      class_hr, class_min = '00', '00'
      return class_hr, class_min, class_text
    elif class_number == 2:
      class_hr, class_min = '01', '35'
      return class_hr, class_min, class_text
    elif class_number == 3:
      class_hr, class_min = '03', '45'
      return class_hr, class_min, class_text
    elif class_number == 4:
      class_hr, class_min = '05', '20'
      return class_hr, class_min, class_text
    elif class_number == 5:
      class_hr, class_min = '06', '55'
      return class_hr, class_min, class_text
    elif class_number == 6:
      class_hr, class_min = '08', '30'
      return class_hr, class_min, class_text
  else:
    print('Only accepted the numbers between 1 ~ 6')
    return class_number
except ValueError:
  pass

終端:

$ py main.py

Select 編號如下

(1)12:00~13:30

(2)13:35~15:05

(3)15:45~17:15

(4)17:20~18:50

(5)18:55~20:30

(6)20:25~22:00


9 美元

有的話請留言

$ 它失敗了

我將代碼修改為以下代碼:

def select_class():

while True:
 try:
  class_number = input('Select number below\n (1)12:00~13:30\n (2)13:35~15:05\n (3)15:45~17:15\n (4)17:20~18:50\n (5)18:55~20:30\n (6)20:25~22:00\n---------------\n')

  if int(class_number) == 1:
    class_hr, class_min = '00', '00'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  elif int(class_number) == 2:
    class_hr, class_min = '01', '35'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  elif int(class_number) == 3:
    class_hr, class_min = '03', '45'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  elif int(class_number) == 4:
    class_hr, class_min = '05', '20'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  elif int(class_number) == 5:
    class_hr, class_min = '06', '55'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  elif int(class_number) == 6:
    class_hr, class_min = '08', '30'
    class_text = input('Leave a comment if you have\n')
    return class_hr, class_min, class_text
  else:
    print('Only accepted the numbers between 1 ~ 6')
    continue
except ValueError:
  pass

它有效,但看起來仍然有些多余。

re.match(pattern, string) 的語法

所以代碼 re.match(r'[1-6]', class_number) 總是拋出異常。

將您的代碼更改為以下

class_number = input( '選擇下面的數字\n (1)12:00~13:30\n (2)13:35~15:05\n (3)15:45~17:15\n (4)17 :20~18:50\n (5)18:55~20:30\n (6)20:25~22:00\n---------------\n' ) class_text = input('如果有請留言\n')

========

9 如果你有 343 發表評論 <class 'str'> 只接受 1 ~ 6 之間的數字

您的匹配需要與字符串匹配。

import re
while True:
    class_number = input('Select number ...')
    class_text = input('Leave a comment if you have\n')
    if re.match(r'[1-6]', class_number):
        if class_number == '1':
            class_hr, class_min = '00', '00'
            return class_hr, class_min, class_text
        # ...
    else:
        print('Only accepted the numbers between 1 ~ 6')

在編寫代碼時,您的re.match始終返回True ,因此永遠不會到達您的else代碼。

如果您想立即捕獲錯誤的class_number ,請考慮:

while True:
    class_number = ''
    while True:
        class_number = input('Select number: '))
        if re.match(r'[1-6]', class_number):
            break
        print('Only accept numbers 1 through 6')
    class_text = input('Leave a comment if you have: \n')
    if class_number == '1':
        class_hr, class_min = '00', '00'
    elif class_number == 2:
        class_hr, class_min = '01', '35'
    elif class_number == 3:
        class_hr, class_min = '03', '45'
    elif class_number == 4:
        class_hr, class_min = '05', '20'
    elif class_number == 5:
        class_hr, class_min = '06', '55'
    elif class_number == 6:
        class_hr, class_min = '08', '30'
    return class_hr, class_min, class_text

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM