#剪刀石头布的小游戏
#和第一天的代码相比,通过编写函数的方式来显示电脑出的什么,代码没有那么臃肿
#学习参考书李宁老师的python从菜鸟到高手
import random
i=random.randint(1,3)
user=int(input('请出拳(1剪刀2石头3布)'))
assert 1<=user<=3,'输入的值有误,请输入正确的数值'
def cs1(l):
if i == 1:
return '剪刀'
elif i==2:
return '石头'
else:
return '布'
l=i
if i==user:
print('平手')
print('电脑出的是:',cs1(l),sep='')
elif (user==1 and i==3) or (user==2 and i==1) or (user==3 and i==2):
print('我赢了')
print('电脑出的是:',cs1(l),sep='')
else:
print('电脑赢')
print('电脑出的是:',cs1(l),sep='')
#使用exec和eval执行求值字符串
exec('i=20')
exec('print(i)')
20
print(i*i)
400
from random improt randint
File "<stdin>", line 1
from random improt randint
^
SyntaxError: invalid syntax
from random import randint
randint(1,20)
10
exec('randint=30')
randint(1,20)#赋值之后randint函数无法使用
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
exec('randint=30',scope)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'scope' is not defined
from random import randint
randint(1,20)
17
scope={}
exec('randint=30',scope)
randint(1,20)#把赋值放入一个字典就不会和已有函数冲突
4
scope.keys()
dict_keys(['__builtins__', 'randint'])#字典中存在randint
a=20
args={'a':20,'b':30}
scope={}
exec('print(a+b)',scope,args)
50
eval('1+2-4')#exec不会提供返回值,eval提供返回值
-1
eval('2*(6-2)')
8
scope={'x':20}
args={'y':30}
args.keys
<built-in method keys of dict object at 0x000000000255A678>
scope.keys
<built-in method keys of dict object at 0x0000000001CFC480>
eval('x+y',scope,args)
50
scope={}
codes=''
print('',end='')
while True:
code=input('')
if code =='':
exec(codes,scope)
codes=''
print('',end='')
continue
codes += code +'\n'
#a,b,c=10,20,30
#print(a*b*c)
#6000
#判断奇偶数,end退出
while True:
a=input('请输入一个数')
if a=='end':
break
num=int(a)
if num%2 == 0:
print('这个数是偶数')
else:
print('这个数是奇数')
#输入行数打印菱形
i=int(input('请输入行数,必须是奇数!'))
assert i%2==1,'数值有误'
if i%2 != 0:
y=i//2
x=1
k=y
while k>=0:
print(' ' * k,end='')
print('*' * (2*x-1))
k -= 1
x+=1
x-=2
k +=2
while k<=y:
print(' ' * k,end='')
print('*' * (2*x-1))
k+=1
x-=1
#模拟计算器
while True:
expression = input("calc:")
if expression == "exit":
break
print(expression,"=", eval(expression))
#列表和元组
names=['my','name','is','a','pig']
number=[1,2,3,4,5,6,7]
salary=[5.0,6.0,7.0,8.0]
flags=[True,False,True,False]
values=[names,number,salary,flags,['a','b','c']]
for value in values:
print(value)
#分片、加、乘
omg=input('输入年份')[3]
print(omg)
import re
months=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
year=input('年:')
assert 1<=int(year)<=9999,'输入的值有误'
month=input('月:')
assert 1<=int(month)<=12,'输入的值有误'
day=input('日:')
assert 1<=int(day)<=31,'输入的值有误'
monthname=months[int(month)-1]
print(year + '年'+ monthname + day +'日')
#切片
>>> s='123456789'
>>> print(s[8:9])
9
>>> print(s[2:9])
3456789
>>> print(s[2:10])
3456789
>>> print(s[2:111])
3456789
>>> print(s[0:9])
123456789
>>> print(s[1:9])
23456789
>>> print(s[1:8])
2345678
>>> number=[1,2,3,4,5,6,7,8]
>>> print(number[-3:-1])
[6, 7]
>>> print(number[-3:-0])
[]
>>> print(number[3:-0])
[]
>>> print(number[0:3])
[1, 2, 3]
>>> print(number[-3:])
[6, 7, 8]
>>> print(number[-3:8])
[6, 7, 8]
>>> print(number[:])
[1, 2, 3, 4, 5, 6, 7, 8]
>>> print(number[:3])
[1, 2, 3]
>>> print(number[1:6:2])
[2, 4, 6]
>>> print(number[1:8:2])
[2, 4, 6, 8]
>>> print(number[:7:2])
[1, 3, 5, 7]
>>> print(number[:8:2])
[1, 3, 5, 7]
>>> print(number[::2])
[1, 3, 5, 7]
>>> print(number[4::2])
[5, 7]
>>> print(number[8:2:-2])
[8, 6, 4]
>>> print(number[8:2:-1])
[8, 7, 6, 5, 4]
>>> print(number[8:2:0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero
url=input('请输入网址:')#https://www.baidu.com
scheme=url[:5]
host=url[8:]
print('scheme:',scheme,'\n',"host:",host)
n=int(input('请输入一个整数:'))
numbers=range(1,n)
number1=numbers[0::2]
number2=numbers[1::2]
for number in number1:
print(number,end=' ')
print('')
print(' ',end = '')
for number in number2:
print(number,end=' ')
'''