集智专栏
资源加载中,请稍后...
集智专栏

[Python Quiz] 2018.03.15 终于从上一个房间逃出来之后

直播时间 21:00

1. 页内观看(仅视频)

2. 完整观看(可发弹幕):Python Quiz 001

3. Bilibili直播:负基础学Python




书接前文,洛杉矶凌晨四点,你终于打开了密室的房门。


你走出房间,发现是一条回廊,形似《寂静岭P.T.》,左手边的房间传来奇怪的声音,让你不得不在意。


“打扰了。”

但已经来不及了。


好奇心让你进来,求生欲决定了你必须要补完这些程序:



Quiz 23

  • 得到了由数字构成的神秘代码
  • 要用这些数字重新排列,组成新的数字
  • “不需要最大的那个啦,只比现在的这个稍微大一点就可以啦”
程序说明
Bigger
示例代码
def next_bigger(number): # next_bigger(1024) -> 1042 # next_bigger(1234567980) -> 1234568079 # next_bigger(9876) -> 9876 # >>>> show me the code <<<< # >>>> show me the code <<<<
正确答案
def next_bigger(number): nb = str(number) try: idx_low = [i-1 for i in range(len(nb)-1, 0, -1) if nb[i] > nb[i-1]][0] idx_high = idx_low + nb[idx_low:].index([x for x in nb[idx_low:] if x > nb[idx_low]][-1]) nb_lst = list(nb) nb_lst[idx_low], nb_lst[idx_high] = nb_lst[idx_high], nb_lst[idx_low] return int(''.join(nb_lst[:idx_low+1] + nb_lst[:idx_low:-1])) except IndexError: return number
程序验证过程
next_bigger(123456789) == 123456798 and next_bigger(1234567890) == 1234567908 and next_bigger(9876543210) == 9876543210
提示信息
需要返回在所有可能的排列中,大于但最接近当前排列的一个


  • 列表切片
  • 异常处理


Quiz 24

  • 数字的值应该是对的(确信)
  • 门锁却依然没有打开
  • 焦急中发现脚下踩了一枚铜币

仔细一看,硬币上的人是尤里乌斯凯撒。再一想,凯撒是罗马人!想起那年暑假,远在夏威夷罗马的爸爸曾经教过罗马数字!

练习
程序说明
Convert to Roman
示例代码
def num_to_roman(num): roman_num = {1000:'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC', 50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'} roman_str = '' # >>>> show me the code <<<< # >>>> show me the code <<<< return roman_str
正确答案
def num_to_roman(num): roman_num = {1000:'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC', 50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'} roman_str = '' for key in sorted(roman_num,reverse=True): while num >= key: roman_str += roman_num[key] num -= key return roman_str
程序验证过程
num_to_roman(984) =='CMLXXXIV' and num_to_roman(1889) == 'MDCCCLXXXIX'
提示信息
罗马数字的千位、百位的表示方法,和十位的类似


  • 字典
  • 字符串拼接

您也许喜欢这些文章

[Python入门] 01 基本法则

发表至系列教程
Python入门教程系列的第一篇,从最基本的概念与法则开始,面向从未接触过Python甚至没有任何编程基础的读者。 Python是数据科学界最主流的编程语言,相对于传统的Excel等数据处理工具,Python具备处理海量数据的能力,并且可以执行机器学习算法。从数据获取(网络爬虫等工具)、数据清理到数据分析拟合再到最终的可视化呈现,Python都能胜任。

数学不行还学AI - 第5话 - 神经网络平话演义(上)

发表至趣味项目
科幻作家Daniel Jeffries的《数学不好还学AI》第五篇,正式进入AI的关键概念环节——神经网络。承接上篇对Tensor的介绍,本篇将深入探索Tensor是如何在神经网络中Flow的。因全文较长,故分为上下集。

[Seaborn入门] 02 barplot与countplot

发表至系列教程
Seaborn入门的第二篇,讲解如何使用barplot和count plot。

文章评论(9)

此心何惧 发表于 2月前回复
quiz23有一个问题:查到的数如果是重复的,而用index返回第一次出现的位置,这时候交换两个数,后面就不是严格递减的,如果将后面的倒着输出,结果就是错的,比如12345698770,应该返回12345706789,而程序返回12345707689,所以不能简单的倒序输出
此心何惧 发表于 2月前回复
quiz23有一个问题:查到的数如果是重复的,而用index返回第一次出现的位置,这时候交换两个数,后面就不是严格递减的,如果将后面的倒着输出,结果就是错的,比如12345698770,应该返回12345706789,而程序返回12345707689
Kaiser集智 站长 发表于 2月前回复
回复罗莎 Роза:哈哈,divi在拉丁语里是圣,圣人凯撒……
divi和diva有什么不一样?
罗莎 Роза 发表于 2月前回复
哈哈,divi在拉丁语里是圣,圣人凯撒……
Kaiser集智 站长 发表于 2月前回复
回复WilhelmTNT:有一个问题:quiz 23 我按照视频里面的程序编程:实验了2398243298741这个数字,程序得出的是239914788234 而不是2399122344788,不知道是我输入的程序有问题还是什么原因??
过段时间会把参考答案发布出来(到时候代码框上会有个“提示”按钮),之后您可以再查看一下
Kaiser集智 站长 发表于 2月前回复
回复WilhelmTNT:有一个问题:quiz 23 我按照视频里面的程序编程:实验了2398243298741这个数字,程序得出的是239914788234 而不是2399122344788,不知道是我输入的程序有问题还是什么原因??
我重新实验了一下,应该是next_bigger(2398243298741) -> 2398243412789,2399开头已经比23982开头大出不少了,中间应该还夹着很多数吧
WilhelmTNT 发表于 2月前回复
有一个问题:quiz 23 我按照视频里面的程序编程:实验了2398243298741这个数字,程序得出的是239914788234 而不是2399122344788,不知道是我输入的程序有问题还是什么原因??
ramens 发表于 2月前回复
x = {} n = num z = 0 for key in roman_num: x[key] = (n - z)//key z += x[key]*key for key in roman_num: roman_str = ''.join([roman_str,roman_num[key]*x[key]]) 感觉我这样写也没错,然而报错
新用户846 发表于 2月前回复
#num_toroman for key in sorted(roman_num,reverse=True): while(int(num) -int(key)>=0): num = num -key roman_str +=str(roman_num[key])