記事ディレクトリ
- (1) タイトルの説明
- (2) Python3 の実装
- (3) 知識ポイントの詳細説明
-
- 1. input(): コンソールの入力を (任意の形式で) 取得します。出力はすべて文字列型です。
- 2. print(): 出力を印刷します。
- 3. 整数型 int(): 指定された基本システム (デフォルトの 10 進システム) の文字列または数値を 10 進整数型に変換します (強制変換)。</font>
- 4. map(): 指定された関数をシーケンス内の各要素に順番に適用します。イテレータを返します。結果は変換され、指定されたデータ構造で出力される必要があります。
- 5. リストの共通操作 (15+9 関数) —— リストは順序付けられた変数の列です。
- 6. str.split(): 区切り文字 (デフォルトではスペース) を指定して文字列をスライスし、分割された文字列リスト (リスト) を返します。
(1) タイトルの説明
(2) Python3 の実装
under10 = '零壹贰叁肆伍陆柒捌玖'
def helper(num):
if num == 0:
return '' # 删除0
elif num < 10:
return under10[num] # 大小写转换
elif num < 20: # (20以内)规则生成
if num % 10 == 0:
return '拾'
else:
return '拾' + helper(num%10)
elif num < 100: # (100以内)十位数规则生成
if num % 10 == 0:
return helper(num//10) + '拾'
else:
return helper(num//10) + '拾' + helper(num%10)
elif num < 1000: # (1000以内)百位数规则生成
if num % 100 == 0:
return helper(num//100) + '佰'
elif 0 < num % 100 <= 9:
return helper(num//100) + '佰零' + helper(num%100)
else:
return helper(num//100) + '佰' + helper(num%100)
elif num < 10000: # (1万以内)千位数规则生成
if num % 1000 == 0:
return helper(num//1000) + '仟'
elif 0 < num % 1000 <= 99:
return helper(num//1000) + '仟零' + helper(num%1000)
else:
return helper(num//1000) + '仟' + helper(num%1000)
elif num < 100000000: # (1亿以内)千万位数规则生成
if num % 10000 == 0:
return helper(num//10000) + '万'
elif 0 < num % 10000 <= 999:
return helper(num//10000) + '万零' + helper(num%10000)
else:
return helper(num//10000) + '万' + helper(num%10000)
elif num < 1000000000000: # (万亿以内)千亿位数规则生成
if num % 100000000 == 0:
return helper(num//100000000) + '亿'
elif 0 < num % 100000000 <= 9999999:
return helper(num//100000000) + '亿零' + helper(num%100000000)
else:
return helper(num//100000000) + '亿' + helper(num%100000000)
else:
return '' # 若不在当前范围,则取消整数部分输出。
while True:
try:
num1, num2 = list(map(int, input().split('.')))
chinese = '人民币'
chinese += helper(num1)
if chinese != '人民币': # 整数位(单位:元)
chinese += '元'
if 0 < num2 < 10: # 第二个小数位(单位:分)
chinese += under10[num2] + '分'
elif num2 == 0: # 小数位为空
chinese += '整'
else: # 第一个小数位(单位:角)
if num2%10 != 0:
chinese += under10[num2//10] + '角' + under10[num2%10] + '分'
else: # 第二个小数位为空
chinese += under10[num2//10] + '角'
print(chinese)
except:
break
(3) 知識ポイントの詳細説明
1. input(): コンソールの入力を (任意の形式で) 取得します。出力はすべて文字列型です。
str1 = input()
print(str1)
print('提示语句:', str1)
print(type(str1))
'''
asd123!#
提示语句: asd123!#
<class 'str'>
'''
一般的に使用される強制転送タイプ | 例証する |
---|---|
int(input()) |
強制的に整数にする (入力は整数でなければならない) |
list(input()) |
リストへの強制 (入力は任意の型にすることができます) |
1.1. input() と list(input()) の違いと相互変換方法
- 同点: どちらのメソッドも for ループの反復を実行して文字を抽出でき、どちらも抽出後の文字列型です。
- 違い:
str = list(input())
入力文字列をリスト型に変換し、関連する操作を実行できます。好き:str.append()
- リストを文字列に変換:
str_list = ['A', 'aA', 2.0, '', 1]
- 方法 1:
print(''.join(str))
- 方法 2:
print(''.join(map(str, str_list)))
述べる:リストに数値が含まれている場合、直接文字列に変換することはできませんそうでない場合、システムはエラーを報告します。
- 方法 1:
print(''.join([str(ii) for ii in str_list]))
- 方法 2:
print(''.join(map(str, str_list)))
map(): 指定された関数に従って、指定されたシーケンスをマップします。つまり、入力関数をシーケンスの各要素に順番に適用し、新しいシーケンスを返します。
(1) 例: リストに数字が含まれている場合、直接文字列に変換することはできません。そうしないと、システムはエラーを報告します。
str = ['25', 'd', 19, 10]
print(' '.join(str))
'''
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/test.py", line 188, in <module>
print(' '.join(str))
TypeError: sequence item 3: expected str instance, int found
'''
(2) 例: リストに数値が含まれている場合、リスト内のすべての要素を文字列に変換します。
str_list = ['A', 'aA', 2.0, '', 1]
print(''.join(str(ii) for ii in str_list))
print(''.join([str(ii) for ii in str_list]))
print(''.join(map(str, str_list))) # map():根据给定函数对指定序列进行映射。即把传入函数依次作用到序列的每一个元素,并返回新的序列。
'''
AaA2.01
AaA2.01
AaA2.01
'''
2. print(): 出力を印刷します。
x, y = 1, 9
print('{},{}' .format(x, y)) # 打印方法一
print('*'*10) # 打印分割符
print(x, ',', y) # 打印方法二
'''
1,9
**********
1 , 9
'''
3. 整数型 int(): 指定された基本システム (デフォルトの 10 進数システム) の文字列または数値を 10 進整数型に変換します (強制変換)。
- Python2 は long int 型で、Python3整数には範囲制限がありませんであるため、long int として使用できます。
- ブール型 bool は、次の 2 つの型を含む整数のサブタイプです
True == 1、False == 0
。
関数の説明:
int(x, base=10)
入力パラメーター:
x
: 文字列または数値 (integer、float)。base
:默认十进制
.
備考 1:パラメータ base がある場合は、(2 進数、10 進数、16 進数) x を 10 進数に変換することを意味します。
備考 2:パラメータ base を使用する場合、入力は整数である必要があり、整数は文字列の形式で入力する必要があります。
入力 | 戻り値 | 例 | 出力 |
---|---|---|---|
int('整数', base=16) |
入力整数は 16 進数として指定され、10 進数の整数に変換されます (同様に、他の 16 進数) | print(int('20', 16)) とprint(int('0XAA', 16)) |
32と170 |
(1) 入力が空または整数である | \ | \ | \ |
int() |
\ | print(int()) |
0 |
int(浮点数) |
\ | print(int(-2.1)) |
-2 |
(2) 文字列として入力 | \ | \ | \ |
int(字符串) |
\ | print(int('-2')) |
-2 |
int(字符串(浮点数)) |
最初に str を float に変換し、次に int に変換する必要があります。そうしないと、エラーが報告されます。 | print(int(float('-2.1'))) |
-2 |
10 進数を 16 進数に変換する
16 進範囲:
0 ~ 65536(0000 ~ FFFF)
メソッド:
- (1) 10 進数を 16 で割り、
(取余数1)
商を 1 にする- (2) 商 1 を 16 で割り、
(取余数2)
商 2 を得る- (3) 商 2 を 16 で割って
(取余数3)
商 3 を得る- (4) 最終的な商 3 は 0 に等しい
(取余数4)
。- 最終結果は逆剰余です
= [余数4, 余数3, 余数2, 余数1]
。例 (整数: 65036) :
(1) 65036 を 16 で割ったときの商は 4064、余りは 12 (16 進数の C)
(2) 4064 を 16 で割ったときの商は 254、余りは0 (16 進数の 0)
(3) 254 を割ると 16、商 15、余り 14 (16 進数 E)
(4) 15 を 16 で割り、商 0、余り 15 (16 進数の F)。
(5) 終了: 16 進数を取得 = FE0C
小数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
16 進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | あ | B | ハ | D | え | ふ |
バイナリ | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
3.1、bin(): 10 進整数を 2 進コードに変換します。戻り値は文字列です。
機能説明:
bin(整型)
print(bin(-3))
print(type(bin(-3)))
'''
-0b11
<class 'str'>
'''
3.2、ord(): ASCII 文字は 10 進整数に変換されます (Unicode 文字 - Unicode 値)。
機能説明:
ord(字符)
print(ord('A'))
print(type(ord('A')))
'''
65
<class 'int'>
'''
3.3. chr(): 10 進数または 16 進数を ASCII 文字に変換します。(Unicode 値 - Unicode 文字)。
機能説明:
chr(number)
print(chr(97))
print(type(chr(97)))
'''
a
<class 'str'>
'''
4. map(): 指定された関数をシーケンス内の各要素に順番に適用します。イテレータを返します。結果は変換され、指定されたデータ構造で出力される必要があります。
関数の説明:
map(function, iterable)
入力パラメーター:
function
:機能を指定します。iterable
: 反復可能なオブジェクト
print('返回一个迭代器: ', map(int, (1, 2, 3)))
# 返回一个迭代器: <map object at 0x0000018507A34130>
結果は、変換と出力のためのデータ構造を指定する必要があります
- データ構造: リスト、タプル、セット。変換後の出力
- データ構造: str. イテレータを返す
- データ構造: dict. ValueError、2 つのパラメーターが必要です
print('将元组转换为list: ', list(map(int, (1, 2, 3))))
print('将字符串转换为list: ', tuple(map(int, '1234')))
print('将字典中的key转换为list: ', set(map(int, {
1: 2, 2: 3, 3: 4})))
'''
将元组转换为list: [1, 2, 3]
将字符串转换为list: (1, 2, 3)
将字典中的key转换为list: {1, 2, 3}
'''
################################################################################
dict_a = [{
'name': 'python', 'points': 10}, {
'name': 'java', 'points': 8}]
print(list(map(lambda x : x['name'] == 'python', dict_a)))
print(dict(map(lambda x : x['name'] == 'python', dict_a)))
"""
[True, False]
TypeError: cannot convert dictionary update sequence element #0 to a sequence
"""
5. リストの共通操作 (15+9 関数) —— リストは順序付けられた変数の列です。
一般に、順序付けられたシーケンス型は、インデックス作成、スライス、加算、乗算、およびメンバー操作をサポートします。
- 不変データ型:
布尔类型(bool)、整型(int)、字符串(str)、元组(tuple)
- 可変データ型:
列表(list)、集合(set)、字典(dict)
シリアルナンバー | 関数 | 例証する |
---|---|---|
0 | list1 = [] |
空のリストを作成する |
0 | list1 = list() |
空のリストを作成する |
1 | list2 = [元素] |
リストを作成します。入力パラメータは任意の型にすることができます |
1 | list2 = list(元素) |
リストを作成します。入力パラメータは任意の型にすることができます |
—— | —— | —— |
2 | list[index] |
インデックス (負の数はフラッシュバックを示します) |
3 | list[start, end] |
スライス (指定範囲の要素を取得) |
4 | list[::-1] |
逆順で出力 (ステップサイズは 1) |
—— | —— | —— |
5 | list.append(元素) |
リストの最後に任意のタイプの要素を追加します |
6 | list.extend(元素) |
反復可能なシーケンスを追加 |
7 | list.insert(index, 元素) |
指定した位置に要素を挿入する |
—— | —— | —— |
8 | list.remove(元素) |
指定された要素を削除します。(1) 同一の要素が複数ある場合、最初の要素のみ削除されます。(2) 存在しない場合、システムはエラーを報告します。 |
9 | list.pop(index) |
指定された位置の要素を削除します。デフォルトでは、最後のアイテムが削除されます。 |
10 | del list(index) |
指定位置の要素を削除する |
11 | list.clear() |
内容をクリアし、空のリストを返す |
—— | —— | —— |
12 | list.index(元素) |
インデックス要素の位置。(1) 同一要素が複数ある場合は、最初の要素の位置のみを返します。(2) 存在しない場合、システムはエラーを報告します。 |
13 | list.count(元素) |
指定された要素の出現回数を数える |
14 | list.reverse() |
逆順に出力する |
15 | list.sort(*, key=None, reverse=False) |
(1) デフォルトでは小さいものから大きいものへと並べます。(2) reverse=True は大きいものから小さいものへのソートを意味します。 |
—— | —— | —— |
(1) | len(list) |
要素数 |
(2) | type(list) |
ビューのデータ型 |
(3) | max(list) |
最大値を返します (ネストされたシーケンスを持つことはできません) |
(4) | min(list) |
最小値を返します (ネストされたシーケンスを持つことはできません) |
(5) | list(tuple) |
タプルをリストに変換 |
(6) | list1 + list2 |
+ 演算子 (連結) |
(7) | list * 3 |
* 演算子 (繰り返し) |
(8) | 元素 in list |
(in / not in) メンバーシップ演算子 (指定された値がシーケンス内にあるかどうかを決定します) |
(9) | for i in list: |
トラバース |
6. str.split(): 区切り文字 (デフォルトではスペース) を指定して文字列をスライスし、分割された文字列リスト (リスト) を返します。
機能の説明:
str.split(str=".", num=string.count(str))[n]
パラメータの説明:
- str: 区切り文字を示します。デフォルトではスペースですが、空にすることはできません。文字列に区切り文字がない場合、文字列全体がリストの要素として扱われます。
- num: 分割数を示します。パラメーター num が存在する場合、num+1 個の部分文字列のみが分離され、各部分文字列を新しい変数に割り当てることができます。
- [n]: n 番目のスライスが選択されていることを示します。
- 注: 区切り文字としてスペースを使用する場合、途中で空の項目は自動的に無視されます。
s = 'www.dod.com.cn'
print('分隔符(默认): ', s.split()) # 【输出结果】分隔符(默认): ['www.dod.com.cn']
print('分隔符(.): ', s.split('.')) # 【输出结果】分隔符(.): ['www', 'dod', 'com', 'cn']
print('分割1次, 分隔符(.): ', s.split('.', 1)) # 【输出结果】分割1次, 分隔符(.): ['www', 'dod.com.cn']
print('分割2次, 分隔符(.): ', s.split('.', 2)) # 【输出结果】分割2次, 分隔符(.): ['www', 'dod', 'com.cn']
print('分割2次, 分隔符(.), 取出分割后下标为1的字符串: ', s.split('.', 2)[1]) # 【输出结果】分割2次, 分隔符(.), 取出分割后下标为1的字符串: dod
print(s.split('.', -1)) # 【输出结果】['www', 'dod', 'com', 'cn']
###########################################
# 分割2次, 并分别保存到三个变量
s1, s2, s3 = s.split('.', 2)
print('s1:', s1) # 【输出结果】s1: www
print('s2:', s1) # 【输出结果】s2: www
print('s3:', s2) # 【输出结果】s3: dod
###########################################
# 连续多次分割
a = 'Hello<[www.dodo.com.cn]>Bye'
print(a.split('[')) # 【输出结果】['Hello<', 'www.dodo.com.cn]>Bye']
print(a.split('[')[1].split(']')[0]) # 【输出结果】www.dodo.com.cn
print(a.split('[')[1].split(']')[0].split('.')) # 【输出结果】['www', 'dodo', 'com', 'cn']