Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 但是,无论是if语句还是else语句,都无法获取url数据库_Python_Json_String_If Statement_Urlrequest - Fatal编程技术网

Python 但是,无论是if语句还是else语句,都无法获取url数据库

Python 但是,无论是if语句还是else语句,都无法获取url数据库,python,json,string,if-statement,urlrequest,Python,Json,String,If Statement,Urlrequest,该程序是一个控制台应用程序,它为用户显示应用程序标题和菜单选项,显示配方类别列表(即牛肉、鸡肉、素食、西餐、沙漠等),根据用户选择的类别显示膳食列表,并根据用户选择的膳食显示膳食信息(说明)。我只需要显示用户所选类别的膳食列表的帮助 我正在使用一个网站,为这个程序提供免费的JSON API,一切正常。该程序显示类别和食谱,但不会显示每个类别的单独膳食。 这很奇怪,因为我将print()语句放在函数的if语句之后,它在函数中按类别获取fines以尝试对其进行调试,但它同时打印pint(1)和pri

该程序是一个控制台应用程序,它为用户显示应用程序标题和菜单选项,显示配方类别列表(即牛肉、鸡肉、素食、西餐、沙漠等),根据用户选择的类别显示膳食列表,并根据用户选择的膳食显示膳食信息(说明)。我只需要显示用户所选类别的膳食列表的帮助

我正在使用一个网站,为这个程序提供免费的JSON API,一切正常。该程序显示类别和食谱,但不会显示每个类别的单独膳食。 这很奇怪,因为我将print()语句放在函数的if语句之后,它在函数中按类别获取fines以尝试对其进行调试,但它同时打印pint(1)和print(2)语句,因此它在正确获取内容的同时还打印else语句。这段代码是recipes.py文件(在下找到)的一部分,该文件位于“按类别搜索”功能中。 这是我用来调试它的东西,以找出为什么它同时打印if和else:

def按类别搜索膳食(类别):
查找\类别=输入(“输入类别:”)
发现=错误
对于范围内的i(len(类别)):
类别=类别[i]
如果category.get_category().lower()==lookup_category.lower():
找到=真
印刷品(1)
如果发现:
膳食=请求。按类别获取膳食(查找类别)
按类别列出膳食(查找类别,膳食)
印刷品(2)
其他:
打印(“无效类别,请重试”)
这很奇怪,因为如果你输入的是菜谱,而不是那一类的食物,它会显示菜谱。在命令菜单中,您可以: (“1-列出所有类别”) (“2-列出某一类别的所有膳食”) (“3-按姓名搜索膳食”) (“0-退出程序”) 到目前为止,我可以输入命令1和3,但不能输入命令2或0。这有3个不同的python文件,我将其中的每一个都包含在每个文件中,其中只包含了特定的“按类别进餐”函数,以使其更简单(我希望是这样)

基本上,目标是要求程序显示您键入的类别中的每顿饭。到目前为止,如果您键入配方名称,它仅显示类别和配方说明。然而,我力不包括,因为它的工作良好

(object.py文件)

(requests.py文件)

这是3个文件中的最后一个,我想问题出在哪里。我在每个if后面放了一个print(1),print(2)语句,它同时打印了那些语句和else语句?基本上,它现在显示的是“无效类别,请再试一次”,大约10次

   import requests


def show_title():
    print("My recipes Program")
    print()


def show_menu():
    print("COMMAND MENU")
    print("1 - List all Categories")
    print("2 - List all Meals for a Category")
    print("3 - Search Meal by Name")
    print("0 - Exit the program")
    print()


def list_categories(categories):
    print("CATEGORIES")
    for i in range(len(categories)):
        category = categories[i]
        print(category.get_category())
    print()


def list_meals_by_category(category, meals):
    print(category.upper() + " MEALS ")
    for i in range(len(meals)):
        meal = meals[i]
        print(meal.get_meal())
    print()


def search_meal_by_category(categories):
    lookup_category = input("Enter a category: ")
    found = False

    for i in range(len(categories)):
        category = categories[i]
        if category.get_category().lower() == lookup_category.lower():
            found = True
            break

        if found:
            meals = requests.get_meals_by_category(lookup_category)
            list_meals_by_category(lookup_category, meals)
        else:
            print("Invalid Category, please try again")

如果您需要更多信息,请发表评论,这是我第一次做这么大的python项目(我知道这对每个人来说都很容易,因为这里的每个人都是天才)。我真的已经盯着这个看了两天了。谢谢大家的帮助

你的意思是写这个:

def按类别搜索膳食(类别):
查找\类别=输入(“输入类别:”)
发现=错误
对于范围内的i(len(类别)):
类别=类别[i]
如果category.get_category().lower()==lookup_category.lower():
找到=真
打破
如果发现:
膳食=请求。按类别获取膳食(查找类别)
按类别列出膳食(查找类别,膳食)
其他:
打印(“无效类别,请重试”)

我已经取消了
if found:
部分的插入,因此当您得到
found=True时;中断
,然后它跳过的其余
,并检测
找到的

哪些是
品脱(1)和打印(2)
语句?@quamrana I在配方后添加了打印(1)打印(2)语句。在“按类别搜索膳食”(categories)函数顶部的if语句后的py文件,查看调试时打印的内容。很抱歉,在
按类别搜索膳食()
中,我只能看到一个
print()
。我该找什么?@quamrana你说得对,应该只有那一个站。然而,当我调试时,有人告诉我在每个if之后添加一个print语句,看看会打印什么。当我这样做时,输出显示:JSON格式错误&无效分类,而不是显示我选择的类别(我选择了素食主义者)的膳食。请用实际代码更新您的问题。如果我在上面的问题中看不到它,那么它就不存在了。是的!这对我有很大帮助。但是,我现在收到一个JSON格式错误。你知道怎么解决吗?可能,但那是另一个问题。请随意发布另一篇文章,但一定要尽量将代码量保持在绝对最小。对于这个问题,您实际上只需要发布一个函数。
    from urllib import request, parse
import json

from objects import Category, Meal


def get_categories():
    url = 'https://www.themealdb.com/api/json/v1/1/list.php?c=list'
    f = request.urlopen(url)
    categories = []

    try:
        data = json.loads(f.read().decode('utf-8'))
        for category_data in data['meals']:
            category = Category(category_data['strCategory'])

            categories.append(category)
    except (ValueError, KeyError, TypeError):
        print("JSON format error")

    return categories


def get_meals_by_category(category):
    url = 'https://www.themealdb.com/api/json/v1/1/filter.php?c=Seafood' + category
    f = request.urlopen(url)
    meals = []

    try:
        data = json.loads(f.read().decode('utf-8'))
        for meal_data in data['meals']:
            category = Meal(meal_data['idMeal'],
                            meal_data['strMeal'],
                            meal_data['strMealThumb'])

            meals.append(category)
    except (ValueError, KeyError, TypeError):
        print("JSON Format error")

    return meals
    
   import requests


def show_title():
    print("My recipes Program")
    print()


def show_menu():
    print("COMMAND MENU")
    print("1 - List all Categories")
    print("2 - List all Meals for a Category")
    print("3 - Search Meal by Name")
    print("0 - Exit the program")
    print()


def list_categories(categories):
    print("CATEGORIES")
    for i in range(len(categories)):
        category = categories[i]
        print(category.get_category())
    print()


def list_meals_by_category(category, meals):
    print(category.upper() + " MEALS ")
    for i in range(len(meals)):
        meal = meals[i]
        print(meal.get_meal())
    print()


def search_meal_by_category(categories):
    lookup_category = input("Enter a category: ")
    found = False

    for i in range(len(categories)):
        category = categories[i]
        if category.get_category().lower() == lookup_category.lower():
            found = True
            break

        if found:
            meals = requests.get_meals_by_category(lookup_category)
            list_meals_by_category(lookup_category, meals)
        else:
            print("Invalid Category, please try again")