[英]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.