python基础第5章代码

# *_*coding:utf-8 *_*
# author:zmj
# mail:adm01@163.com

“””5.5循环”””
“””5.5.1while循环”””
x = 1
while x <= 100:
print(x)
x += 1
name = ”
while not name.strip():
name = input(‘Please enter your name: ‘)
print(“Hello,{}!”.format(name))

“””5.5.2for循环”””

# 相比while for更紧凑,能够使用for就不使用while
words = [‘this’, ‘is’, ‘an’, ‘ex’, ‘parrot’]
for word in words:
print(word)
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in numbers:
print(number)
print(range(0, 10))
x = list(range(0, 10))
print(x)

for number in range(0, 101):
print(number)

“””5.5.3迭代字典”””
d = {
‘x’: 1,
‘y’: 2,
‘z’: 3
}
for key in d:
print(key)
print(key, ‘corresponds to’, d[key])

for key, value in d.items():
print(key, end=’:’)
print(value)
print(key, ‘corresponds to ‘, value)

“””5.5.4一些迭代工具”””
# 并行迭代,将两个序列缝合起来并返回一个元组
names = [‘anne’, ‘beth’, ‘geogrge’, ‘damon’]
ages = [12, 45, 32, 102]
for i in range(len(names)):
print(names[i], ‘is ‘, ages[i], ‘years old.’)
lst_x = list(zip(names, ages))
print(lst_x)
for name, age in zip(names, ages):
print(name, ‘is’, age, ‘ old’)
# 迭代时获取索引,替换前搜索完全没必要,如果不替换值结果可能不对,该字符串首次出现的位置
strings = [‘test’, ‘is’, ‘very’, ‘important’, ‘test’]
for string in strings:
if ‘s’ in string:
index = strings.index(string)
strings[index] = ‘[censored]’
print(strings)

strings = [‘test’, ‘is’, ‘very’, ‘important’, ‘test’]

# 这个方案可以接受但是笨拙
index = 0
for string in strings:
if ‘s’ in string:
strings[index] = ‘[censored]’
index += 1
print(strings)

# enumerate()返回迭代的索引-值对
strings = [‘test’, ‘is’, ‘very’, ‘important’, ‘test’]
for index, string in enumerate(strings):
if ‘s’ in string:
strings[index] = ‘[censored]’
print(strings)

# 反向迭代和排序后迭代
# 迭代字典
lst_y = [4, 3, 6, 8, 3]
print(lst_y)
print(sorted(lst_y))
print(lst_y)

# sorted 返回的是一个列表,而reversed返回的是zip一样可迭代对象
y = sorted(‘Hello world!’)
print(y)
print(list(reversed(‘Hello world’)))
z = ”.join(reversed(‘Hellow world’))
print(z)

“””5.5.5跳出循环”””
# break
from math import sqrt

for n in range(99, 0, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
# contine 它结束当前迭代,并跳到下一次迭代开头

# while True/break成例
word = ‘dummy’
while word:
word = input(‘Please input a word: ‘)
# 使用这个单词做些事情
print(‘The word was ‘, word)

# 下面来消除最开始赋值的一个哑值
word = input(‘Pleas input a word: ‘)
while word:
# 使用这个单词做些事情
print(“The word was “, word)
# 哑值消除了但是,input调用了两次
while True:
word = input(‘Please input a word: ‘)
if not word: break
# 使用这个单词来做些事情
print(‘The word was: ‘, word)

“””5.5.6循环中的else子句”””
from math import sqrt

for n in range(100, 81, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
else:
print(“Didn’t find it”)

“””5.6 简单推导”””
lst_z = [x * x for x in range(10)]
print(lst_z)

lst_a = [x * x for x in range(10) if x % 3 == 0]
print(lst_a)

lst_b = [(x, y) for x in range(3) for y in range(3)]
print(lst_b)

result = []
for x in range(3):
for y in range(3):
result.append((x, y))
print(result)

girls = [‘alice’, ‘bernice’, ‘clarice’]
boys = [‘chris’, ‘arnold’, ‘bob’]
merry = [b + ‘+’ + g for b in boys for g in girls if b[0] == g[0]]
print(merry)

# 上面代码效率不高
girls = [‘alice’, ‘bernice’, ‘clarice’]
boys = [‘chris’, ‘arnold’, ‘bob’]
letterGirls = {}
for girl in girls:
letterGirls.setdefault(girl[0], []).append(girl)
# print(letterGirls)
print([b + ‘+’ + g for b in boys for g in letterGirls[b[0]]])

# 使用园括号替代方括号并不能实现元组推导,而是将创建生成器,然而可以使用花括号来执行字典推导
squares = {i: “{} squared is {}”.format(i, i ** 2) for i in range(10)}
print(squares)
print(squares[8])

“””5.7三人行”””
“””5.7.1什么都不做”””
name = input(‘Please input a name: ‘)
if name == ‘Ralph Auldus Melish’:
print(“Wellcom!”)
elif name == ‘Enid’:
# 还未完成…
pass
elif name == ‘Bill Gates’:
print(‘Access Denied’)

“””5.7.2使用del删除”””
scoundrel = {
‘age’: 42,
‘first name’: ‘Robin’,
‘last name’: ‘of Locksley’
}
print(scoundrel)
robin = scoundrel
scoundrel = None
print(scoundrel)
print(robin)
robin = None
# 此时原来的字典python会自动清除
print(robin)

x = 1
del x
# 此时print(x)会报错
x = [‘Hello’, ‘world’]
y = x
y[1] = “Python”
print(x)
# 只清空了x
del x
print(y)

“””5.7.3使用exec和eval执行字符串及计算其结果”””
# exec
exec(“print(‘Hello world!’)”)

from math import sqrt
exec(“sqrt = 1”)
# sqrt(4)会报错名称空间已经被污染

from math import sqrt
scope = {}
exec(“sqrt = 1”,scope)
print(sqrt(4))
print(scope[‘sqrt’])
len(scope)
print(scope)

# eval
eval(input(“Enter an arithmetic expression: “))
scope = {}
scope[‘x’] = 2
scope[‘y’] = 3
print(eval(‘x*y’,scope))

scope = {}
exec(‘x=2’,scope)
print(eval(‘x*x’,scope))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值