【375】COMP 9021 相关笔记
1. Python 中的逻辑否定用 not
2. 对于下面的代码直邮输入整数才能运行,无论字符串或者浮点型都会报错
1 | int ( input ( 'How many games should I simulate? ' )) |
可以通过 try 来修改,同时注意 raise 的使用
1 2 3 4 5 6 7 8 9 | while True : try : nb_of_games = int ( input ( 'How many games should I simulate? ' )) if nb_of_games < = 0 : raise ValueError print ( 'Ok, will do!' ) break except ValueError: print ( 'Your input is incorrect, try again.' ) |
3. set 与 dict 都是大括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # Checking for membership in a list 'y' in [ 'yes' , 'y' , 'no' , 'n' ] 'Y' in [ 'yes' , 'y' , 'no' , 'n' ] # Checking for membership in a set 'y' in { 'yes' , 'y' , 'no' , 'n' } 'Y' in { 'yes' , 'y' , 'no' , 'n' } ''' Curly braces are used for both literal dictionaries and literal sets. <br>There is no potential conflict, except for empty set versus empty dictionary; <br>{} denotes an empty dictionary, not an empty set: ''' # Singleton dictionary and set, respectively type ({ 'one' : 1 }) type ({ 'one' }) # Empty dictionary and set, respectively type ({}) type ( set ()) |
4. random.choice() 可以随机选择列表里面的元素
random.randrange(),在 0 与 n 之间随机产生一个数
1 2 3 4 | from random import choice doors = [ 'A' , 'B' , 'C' ] for i in range ( 12 ): choice(doors) |
5. list.pop() 默认删除最后一个,否则按照索引删除
6. format
To output information about the game as it is being played, it is convenient to use formatted strings; they are preceded with f
and can contain pairs of curly braces that surround expressions meant to be replaced with their values. Also, though strings can be explicitly concatenated with the +
operator, they can also be implicitly concatenated when they are separated with nothing but space characters, including possibly new lines:
1 2 3 4 5 6 7 | x = 10 u = 4.5 v = 10 print (f 'x is equal to {x}.' ' That is not all: ' f '{u} divided by {v} equals {u / v}.' ) |
1 2 3 4 5 6 7 8 | x = 123 / 321 f '{x}' f '{x:.0f}' f '{x:.1f}' f '{x:.2f}' f '{x:.3f}' f '{x:.4f}' f '{x:.30f}' |
7. 神奇的 * 号,乘号,可以扩展字符串,可以扩展列表
1 2 | [ 1 , 2 , 3 ] * 3 "abc" * 3 |
8. 输出格式,0补全
1 2 3 4 5 6 7 8 | # A field width of 3 at least, padding with spaces if needed f '{90:3}' , f '{90:3b}' , f '{90:3o}' , f '{90:3x}' , f '{90:3X}' # A field width of 3 at least, padding with 0's if needed f '{90:03}' , f '{90:03b}' , f '{90:03o}' , f '{90:03x}' , f '{90:03X}' # A field width of 8 at least, padding with spaces if needed f '{90:8}' , f '{90:8b}' , f '{90:8o}' , f '{90:8x}' , f '{90:8X}' # A field width of 8 at least, padding with 0's if needed f '{90:08}' , f '{90:08b}' , f '{90:08o}' , f '{90:08x}' , f '{90:08X}' |
sorted
Let us still not "hardcode" the sequence of bits as (s[7], s[3], s[5], s[1], s[6], s[2], s[4], s[0])
, but generate it. Let us first examine the sorted()
function. By default, sorted()
returns the list of members of its arguments in their default order:
1 2 3 4 | sorted ([ 2 , - 2 , 1 , - 1 , 0 ]) # Lexicographic/lexical/dictionary/alphabetic order sorted ({ 'a' , 'b' , 'ab' , 'bb' , 'abc' , 'C' }) sorted ((( 2 , 1 , 0 ), ( 0 , 1 , 2 ), ( 1 , 2 , 0 ), ( 1 , 0 , 2 ))) |
sorted()
accepts the reverse
keyword argument:
1 2 3 | sorted ([ 2 , - 2 , 1 , - 1 , 0 ], reverse = True ) sorted ({ 'a' , 'b' , 'ab' , 'bb' , 'abc' , 'C' }, reverse = True ) sorted ((( 2 , 1 , 0 ), ( 0 , 1 , 2 ), ( 1 , 2 , 0 ), ( 1 , 0 , 2 )), reverse = True ) |
sorted()
also accepts the key
argument, which should evaluate to a callable, e.g., a function. The function is called on all elements of the sequence to sort, and elements are sorted in the natural order of the values returned by the function:
1 2 3 | sorted ([ 2 , - 2 , 1 , - 1 , 0 ], key = abs ) sorted ({ 'a' , 'b' , 'ab' , 'bb' , 'abc' , 'C' }, key = str .lower) sorted ({ 'a' , 'b' , 'ab' , 'bb' , 'abc' , 'C' }, key = len ) |
We can also set key
to an own defined function: 按照自定义的顺序进行排序
1 2 3 4 5 6 7 8 | def _2_0_1(s): return s[ 2 ], s[ 0 ], s[ 1 ] def _2_1_0(s): return s[ 2 ], s[ 1 ], s[ 0 ] sorted ((( 2 , 1 , 0 ), ( 0 , 1 , 2 ), ( 1 , 2 , 0 ), ( 1 , 0 , 2 )), key = _2_0_1) sorted ((( 2 , 1 , 0 ), ( 0 , 1 , 2 ), ( 1 , 2 , 0 ), ( 1 , 0 , 2 )), key = _2_1_0) |
So we could generate the sequence (0, 4, 2, 6, 1, 5, 3, 7) as follows:
1 2 3 4 5 | def three_two_one(p): return p % 2 , p / / 2 % 2 , p % 4 for p in sorted ( range ( 8 ), key = three_two_one): p, f '{p:03b}' |
lambda 表达式
There is a better way, using a lambda expression. Lambda expressions offer a concise way to define functions, that do not need to be named:
1 2 3 | # Functions taking no argument, so returning a constant f = lambda : 3 ; f() ( lambda : ( 1 , 2 , 3 ))() |
1 2 3 | # Functions taking one argument, the first of which is identity f = lambda x: x; f( 3 ) ( lambda x: 2 * x + 1 )( 3 ) |
1 2 3 | # Functions taking two arguments f = lambda x, y: 2 * (x + y); f( 3 , 7 ) ( lambda x, y: x + y)([ 1 , 2 , 3 ], [ 4 , 5 , 6 ]) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2017-02-27 【260】centos设置root密码