Def name在Python中没有定义



我是python的新手,自己开始了一个项目,长话短说,我正试图通过从imdb根据类型来编程电影选择器,到目前为止,除了第二个defcalled horror()给我一个错误说没有定义,任何帮助都会非常感激…:)

这是我的代码

import random
import secrets
import requests
from bs4 import BeautifulSoup
import numpy as np
def main():
print("1 Horror.")
print('2 Romance.')
print("3 Sci-Fi.")
print("4 Comedy.")
print("0 Exit.")
menu()
def menu():
while True:
choice = int(input("Enter your choice; "))
if choice == 1:
print("Horror?")
horror()
elif choice == 2:
print("Romance?")
elif choice == 3:
print("Comedy?")
comedy()
elif choice == 4:
print("Sci-Fi?")
elif choice == 0:
print("Goodbye!")
break
else:
print("Invalid choice.")

def comedy():
titles = []
pages = np.arange(1, 1001, 50)
pages
for page in pages:
page = requests.get(
'https://www.imdb.com/search/title/?genres=comedy&explore=title_type,genres&pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=3396781f-d87f-4fac-8694-c56ce6f490fe&pf_rd_r=WWP23JMS19Y0FJQ181DT&pf_rd_s=center-1&pf_rd_t=15051&pf_rd_i=genre&ref_=ft_gnr_pr1_i_1')
soup = BeautifulSoup(page.text, 'html.parser')
movie_div = soup.find_all('div', {'class': 'lister-item mode-advanced'})
for container in movie_div:
name = container.h3.a.text
titles.append(name)
ComedyMovie = (secrets.choice(titles))
print("")
print(ComedyMovie)
print("")
np.delete
break
main()
def horror():
titles = []
pages = np.arange(1, 1001, 50)
pages
for page in pages:
page = requests.get(
'https://www.imdb.com/search/title?genres=horror&explore=title_type,genres&pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=3396781f-d87f-4fac-8694-c56ce6f490fe&pf_rd_r=WWP23JMS19Y0FJQ181DT&pf_rd_s=center-1&pf_rd_t=15051&pf_rd_i=genre&ref_=ft_gnr_pr1_i_3')
soup = BeautifulSoup(page.text, 'html.parser')
movie_div = soup.find_all('div', {'class': 'lister-item mode-advanced'})
for container in movie_div:
# Scraping the movie's name
name = container.h3.a.text
titles.append(name)
HorrorMovie = (secrets.choice(titles))
print("")
print(HorrorMovie)
print("")
np.delete
break
main()

基本上喜剧片还不错,恐怖片就不那么好了

所以,这里发生的事情是,当文件启动时,它逐行读取所有代码,直到第一次调用main()方法,并立即开始执行该方法,暂停对文件的进一步读取。

在这个main()方法中,有一个输入请求调用了另一个方法menu()。一旦您将输入提供为horror,系统将尝试运行horror()方法,但它找不到它,因为在启动代码时读取的最后一行是第一个main(),并且它无法继续超过这个点到缓冲区,因为它被该方法阻塞了。简而言之,您不能调用函数horror(),因为它在定义之前在技术上是被调用的。

在python中,你可以在文件的任何地方定义一个方法,并以任何顺序调用它们,但你不能在它被定义之前调用它们。

因此,就像@user2357112建议的那样,只需删除第一个main()方法,而这将在文件末尾调用,最好使用if __name__=='__main__',一切都将按预期工作。

尝试在脚本中使用if __name__ == __main__:。这允许您调用脚本并执行其中的所有代码,而不是尝试像模块调用一样执行和运行函数。

import random
import secrets
import requests
from bs4 import BeautifulSoup
import numpy as np
def main():
print("1 Horror.")
print('2 Romance.')
print("3 Sci-Fi.")
print("4 Comedy.")
print("0 Exit.")
menu()
def menu():
while True:
choice = int(input("Enter your choice; "))
if choice == 1:
print("Horror?")
horror()
elif choice == 2:
print("Romance?")
elif choice == 3:
print("Comedy?")
comedy()
elif choice == 4:
print("Sci-Fi?")
elif choice == 0:
print("Goodbye!")
break
else:
print("Invalid choice.")

def comedy():
titles = []
pages = np.arange(1, 1001, 50)
pages
for page in pages:
page = requests.get(
'https://www.imdb.com/search/title/?genres=comedy&explore=title_type,genres&pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=3396781f-d87f-4fac-8694-c56ce6f490fe&pf_rd_r=WWP23JMS19Y0FJQ181DT&pf_rd_s=center-1&pf_rd_t=15051&pf_rd_i=genre&ref_=ft_gnr_pr1_i_1')
soup = BeautifulSoup(page.text, 'html.parser')
movie_div = soup.find_all('div', {'class': 'lister-item mode-advanced'})
for container in movie_div:
name = container.h3.a.text
titles.append(name)
ComedyMovie = (secrets.choice(titles))
print("")
print(ComedyMovie)
print("")
np.delete
break

def horror():
titles = []
pages = np.arange(1, 1001, 50)
pages
for page in pages:
page = requests.get(
'https://www.imdb.com/search/title?genres=horror&explore=title_type,genres&pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=3396781f-d87f-4fac-8694-c56ce6f490fe&pf_rd_r=WWP23JMS19Y0FJQ181DT&pf_rd_s=center-1&pf_rd_t=15051&pf_rd_i=genre&ref_=ft_gnr_pr1_i_3')
soup = BeautifulSoup(page.text, 'html.parser')
movie_div = soup.find_all('div', {'class': 'lister-item mode-advanced'})
for container in movie_div:
# Scraping the movie's name
name = container.h3.a.text
titles.append(name)
HorrorMovie = (secrets.choice(titles))
print("")
print(HorrorMovie)
print("")
np.delete
break

if __name__ == "__main__":
main()

最新更新