簡體   English   中英

返回for循環中的特定數字

[英]Go back to specific number in a for-loop

我有以下代碼:

def five_numbers():
    my_list = []
    for i in range(1, 6):
        user_nr = check_if_number_is_1_to_25(input("Number " + str(i) + ": "))
        my_list.append(user_nr)
    return my_list

def check_if_number_is_1_to_25(number):
    if number.isalpha():
        print("Enter a number between 1 and 25.")
        # Here I want to go back to five_numbers() and the number x (for example number 4)

現在,我要檢查輸入內容是否包含任何字母。 如果有的話,我想打印一條消息,然后再返回到用戶先前使用的電話號碼。 我試圖返回Five_numbers(),但是用戶將從頭開始。

我感謝所有的幫助。

為num添加關鍵字arg,並將其默認設置為None

def five_numbers(num=None):
    my_list = []
    if num is None:
        for i in range(1, 6):
            user_nr = check_if_number_is_1_to_25(input("Number " + str(i) + ": "))
            my_list.append(user_nr)
    else:
        # do other stuff with num (4) here...
    return my_list

def check_if_number_is_1_to_25(number):
    if number.isalpha():
        print("Enter a number between 1 and 25.")
        five_numbers(4)

您可以使用while循環繼續詢問用戶有效的輸入,直到用戶輸入一個為止。 您還應該使check函數引發異常,以便調用方可以捕獲該異常並重試輸入:

def five_numbers():
    my_list = []
    for i in range(1, 6):
        while True:
            user_nr = input("Number " + str(i) + ": ")
            try:
                check_if_number_is_1_to_25(user_nr)
                break
            except ValueError as e:
                print(str(e))
        my_list.append(user_nr)
    return my_list

def check_if_number_is_1_to_25(number):
    if number.isalpha():
        raise ValueError('Enter a number between 1 and 25.')

不要使用for循環,而應使用while循環,並將列表長度作為條件。 使check函數返回一個布爾值,並使用它來決定是否追加到列表中。

def five_numbers():
    my_list = []
    while len(my_list) < 5:
        user_nr = input("Number {}: ".format(len(my_list)+1))
        if check_if_number_is_1_to_25(user_nr):
            my_list.append(user_nr)
        else:
            print("Enter a number between 1 and 25.")
    return my_list

def check_if_number_is_1_to_25(number):
    return number.isdigit() and (1 <= float(number) <= 25)

暫無
暫無

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

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