335
社区成员




历史上有很多编程语言,他们在编程语言发展的过程中都起到过重要的作用。
下面的 Python 数组包含了历史上的大部分编程语言。
languages = ["Regional Assembly Language","Autocode","FORTRAN","IPL (LISP的先驱)","FLOW-MATIC (COBOL的先驱)","COMTRAN (COBOL的先驱)","LISP","ALGOL 58","FACT (COBOL的先驱)","COBOL","APL","Simula","SNOBOL","CPL (C的先驱)","BASIC","PL/I","BCPL (C的先驱)","Logo","Pascal","Forth","C语言","Smalltalk","Prolog","ML","Scheme","SQL","Ada","C++","Common Lisp","MATLAB","Eiffel","Objective-C","Erlang","Perl","Tcl","FL (Backus)","Haskell","Python","Visual Basic","HTML","Ruby","Lua","CLOS (part of ANSI Common Lisp)","Java","Delphi (Object Pascal)","JavaScript","PHP","REBOL","D","C#","Visual Basic .NET","F#","Scala","Factor","Windows PowerShell","Rust","Clojure","Go"]
下面的 Python 数组包含了这些编程对应的创建时间。
years = [1951, 1952, 1954, 1954, 1955, 1957, 1958, 1958, 1959, 1959, 1962, 1962, 1962, 1963, 1964, 1964, 1967 ,1968 ,1970 ,1970 ,1972 ,1972 ,1972 ,1973 ,1975 ,1978 ,1980 ,1983 ,1984 ,1984 ,1985 ,1986 ,1986 ,1987 ,1988 ,1989 ,1990 ,1991 ,1991 ,1991 ,1993 ,1993 ,1994 ,1995 ,1995 ,1995 ,1995 ,1997 ,1999 ,2001 ,2001 ,2002 ,2003 ,2003 ,2006 ,2006 ,2007 ,2009]
编写一个 Python 程序,每行打印每个编程语言的名字和对应的创建时间,例如:
Regional Assembly Language : 1951
Autocode : 1952
FORTRAN : 1954
...
请找出以下代码中错误的选项。
if name == 'main':
languages = ...
years = ...
for language in languages:
for year in years:
print(language, ':', year)
# 错误选项:一个语言都和每个年份一起打印了出来,正确的应该是一个语言按顺序对应一个年份。
if name == 'main':
languages = ...
years = ...
for language in languages:
for year in years:
print(language, ':', year)
这个选项是双循环, 属于循环嵌套, 顾名思义就是一个大循环里面套用一个小循环
每一次完整循环打印的结果应该是大循环中的一个元素和嵌套循环中小循环的所有元素
形象表示类似于:
第一次循环: 语言1 , 时间1, 时间2,.....,时间[len(years)-1]
第二次循环: 语言2 , 时间1, 时间2,.....,时间[len(years)-1]
.
.
最后一次循环: 语言[len(lanfuages)-1] , 时间1, 时间2,.....,时间[len(years)-1]
选项 D 中使用了两个嵌套的 for 循环来遍历 languages 和 years 数组,这会导致每个语言名称被打印多次,每次与 years 数组中的不同年份配对,正确的做法是确保每个语言名称只打印一次,并且与对应的年份配对。下面是示例:
if name == 'main':
languages = ["Regional Assembly Language","Autocode","FORTRAN", ...] # 省略其他语言
years = [1951, 1952, 1954, ...] # 省略其他年份
for i in range(len(languages)):
print(languages[i], ':', years[i])
或者使用列表推导式:
if name == 'main':
languages = ["Regional Assembly Language","Autocode","FORTRAN", ...] # 省略其他语言
years = [1951, 1952, 1954, ...] # 省略其他年份
[print(languages[i], ':', years[i]) for i in range(len(languages))]
print(languages[i], ':', years[i])
因为循环嵌套导致遍历速度不一致,导致输出不一致。languages遍历一个元素, year遍历所有元素
如果在错误语句中进行修改,满足要求,该怎么改,谁能写下代码吗
自己做题看不太懂,来评论区瞬间清楚了,感谢平台
正确:
使用了一个 while 循环来遍历 years 列表的索引,然后通过索引来获取对应的语言和年份。
i = 0
while i < len(years):
language = languages[i]
year = years[i]
print(language,':',year)
i += 1
正确:
使用了一个 for 循环来遍历 languages 列表的索引,然后通过索引来获取对应的语言和年份。这种方法与第一个选项相似,但使用了 for 循环而不是 while 循环。
for i in range(0,len(languages)):
language = languages[i]
year = years[i]
print(language,':',year)
正确:
列表推导式,它会遍历 languages 列表的索引,并打印每个语言和对应的年份。
[print(languages[i],':',years[i]) for i in range(0,len(languages))]
错误:
会导致每种语言被打印多次,每次都与不同的年份配对
for language in languages:
for year in years:
print(language, ':',year)
range(0,len(languages)) 什么意思?
range(0, len(languages)) 是一个 Python 中的内置函数 range() 的调用,它生成一个整数序列,范围从 0 开始(包括 0)到 len(languages) 结束(不包括 len(languages))。这个序列包括了从 0 到 len(languages) - 1 的所有整数。
选项B中的方法是错误的。对于两个数组languages
和years
,选项B中的代码将使用嵌套的for
循环,这将导致每一种语言都与所有的年份配对,而不是仅与其创建年份配对。这明显不是题目的要求,题目要求的是将同一索引处的编程语言和年份配对。因此,选项B是错误的。
是不是可以直接用zip实现
if __name__ == '__main__':
print("这个是什么意思?看不懂")
而统一规范
while后面的i是小于列表长度的,如果i刚好等于列表长度的时候,下面的代码还会执行吗